【发布时间】:2016-01-16 16:13:25
【问题描述】:
首先,这是我当前代码的一部分:
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
});
【问题讨论】:
-
你想要
Promise.all() -
@SLaks 是的,我已经读过这个,但我不确定我会如何使用它。
-
如果你使用像 q 这样的 Promise 库,然后创建像
var f = q.denodeify(fs.write)这样的函数,将每个 fs.write 推送到 arr 中,它会创建一个 Promise 数组,然后使用 q.all(arr)为了那个原因 。否则每个 fs.write 都有一个回调,为每个创建一个承诺并等待所有解决 -
@PrakashRajagaopal 我在 node.js 中使用
Promise的本机实现 -
是的,它确实有 denodeify 和 all 。 github.com/then/promise 或至少我希望我正在查看正确的文档:D
标签: javascript node.js asynchronous promise