Javascript bluebird中的Promise.all()是否等待迭代器?
在以下示例中Javascript bluebird中的Promise.all()是否等待迭代器?,javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,在以下示例中 是的,它将等待,假设fs.writeFileAsync()返回一个承诺(我无法判断这是哪个fs库,因为NodeJS没有writeFileAsync()方法) for循环是同步的,因此必须在调用Promise.all()之前完成。它启动一系列异步调用,但它会立即在文件数组中填充每个调用一个承诺 这些承诺将以文件写入完成的任何顺序自行解决。此时,您的all promise将调用它的.then()方法。for循环是同步的,因此javascript是单线程的,它肯定会在下一行代码之前完成,
是的,它将等待,假设
fs.writeFileAsync()
返回一个承诺(我无法判断这是哪个fs库,因为NodeJS没有writeFileAsync()
方法)
for循环是同步的,因此必须在调用Promise.all()
之前完成。它启动一系列异步调用,但它会立即在文件
数组中填充每个调用一个承诺
这些承诺将以文件写入完成的任何顺序自行解决。此时,您的
all promise
将调用它的.then()
方法。for循环是同步的,因此javascript是单线程的,它肯定会在下一行代码之前完成,不管这是什么。如果没有bluebird,这将是微不足道的->异步后缀看起来像是bluebirdPromsie.promisifyAll
的结果-因此它返回一个promise@JaromandaX是的,这是蓝知更鸟的特征@peteb-事实上这不完全是真的-你可以好的,所以不管怎样,这都是一只蓝鸟在做一些承诺包装。很高兴知道这一点,但我不确定我是否应该在答案中特别添加这一点。是否有一个规则或列表来找出哪种事情是同步运行的?也就是说,在哪里可以找到其中哪一个将同步运行:创建对象的新实例,设置对象的属性,调用对象的任何方法,需要js脚本。(我们可以自己做什么样的测试来找到它?什么样的设置可以创建一个测试环境来确定什么是同步的?)
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");
});
some_promise_that_makes_files_array_with_for_loop().then(function(files){
Promise.all(files).then(function() {
console.log("all the files were created");
});
});