在node.js中的for循环之后完成多个writeFile函数时解析promise

时间:2016-01-15 21:09:29

标签: javascript node.js asynchronous promise

首先,这是我当前代码的一部分:

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');
    })

我的问题是,在writeFile()所有文件都是异步后,我不知道如何告诉我的承诺解决。我想要做的是在完全写入我的驱动器后,在我的下一个then()中使用这些文件。有人可以帮帮我吗?我现在有点迷失了,也是node.js的新手,所以请耐心等待我:)

提前致谢!

#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
    });

1 个答案:

答案 0 :(得分:2)

也许你正在寻找这样的东西:

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
});