以下示例来自http://bluebirdjs.com/docs/api/promise.all.html
var files = [];
for (var i = 0; i < 100; ++i) {
files.push(fs.writeFileAsync("file-" + i + ".txt", "", "utf-8"));
}
Promise.all(files).then(function() {
console.log("all the files were created");
});
是否确保(bluebird)承诺for循环在我们开始Promise.all()
行之前完成或者for循环如此之快以至于我们可以假设它们将在Promise.all()
行之前完成?< / p>
我试图了解我能期望按顺序完成什么,以及我需要将Promise包裹起来,以便在不必要的时候不要写这样的东西:
some_promise_that_makes_files_array_with_for_loop().then(function(files){
Promise.all(files).then(function() {
console.log("all the files were created");
});
});
答案 0 :(得分:2)
是的,它会等待,假设fs.writeFileAsync()
返回一个promise(由于NodeJS没有writeFileAsync()
方法,我无法判断这是来自哪个fs库。)
for循环是同步的,因此必须在调用Promise.all()
之前完成。它启动了一堆异步调用,但它会立即填充files
数组,每次调用一个承诺。
这些承诺将以文件写入完成的任何顺序自行解决。此时,您的all promise
会将其称为.then()
方法。