Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resolve promise when multiple writeFile functions finished after for-loop in node.js

First of all, here is a part of my current code:

return new Promise(function(resolve, reject) {
        for (var i = 1; i <= variables; i++) {
            fs.writeFile("file-" + i + ".txt", dataString + ' ' + i + ' 0', "utf-8");
        }   
        if (i == variables)
            resolve('Files have been written');
        else
            reject('Some error occured');
    })

My problem is that I don't know how to tell my promise to resolve after all files have been written as writeFile() is async. What I want to do is to use these files in my next then() when they are completely written to my drive. Can anybody help me out here? I'm kind of lost right now and also new to node.js so please bear with me :)

Thanks in advance!

#UPDATE 1:

    var promises = [];
    for (var i = 1; i <= variables; i++) {
        promises.push(Promise.resolve(
            new Promise(function(resolve, reject) {
                fs.writeFile('file-' + i + '.cnf', dimacs2 + ' ' + i + ' 0', 'utf-8', function(err) {
                    if (err) {
                        reject(err);
                    }
                    else {
                        resolve();
                    }
                });
            }
        )));
    }
    Promise.all(promises).then(function() {
        // code that runs after files have been written
    });
like image 818
Since001 Avatar asked Feb 17 '26 00:02

Since001


1 Answers

Maybe you're looking for something like this:

Promise.all(
  variables.map(function (variable, i) {
    return new Promise(function (resolve, reject) {
      fs.writeFile("file-" + i + ".txt", dataString + ' ' + i + ' 0', "utf-8", function (err) {
        if (err) {
          reject(err);
        } else {
          resolve();
        }
      });
    });
  })
)
.then(function () {
  // Files have been written
})
.catch(function (err) {
  // Some errors occured
});
like image 175
Zoltan.Tamasi Avatar answered Feb 18 '26 14:02

Zoltan.Tamasi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!