Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript bluebird中的Promise.all()是否等待迭代器?_Javascript_Node.js_Promise_Bluebird - Fatal编程技术网

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,这将是微不足道的->异步
后缀看起来像是bluebird
Promsie.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");
    });
});