什么时候然后从Promise.all()的子句运行?

问题描述 投票:0回答:2

我正在盯着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");
});

我的问题特别是编译器在填充文件后如何知道调用.then块。什么阻止在文件长度为10或长度为100时调用.then子句。

javascript asynchronous collections promise
2个回答
1
投票

什么时候然后从Promise.all()的子句运行?

Promise.all()返回一个新的promise,它具有基于你传递给Promise.all()的promises数组的特定行为。

如果承诺数组中的任何一个承诺拒绝,那么Promise.all()承诺将拒绝并将调用它的.then()中的拒绝处理程序(如果有的话)。

如果/当您传递的所有承诺都成功解决,那么Promise.all()承诺将解决,它将调用.then()中的解析处理程序。

我的问题特别是编译器在填充文件后如何知道调用.then块。什么阻止在文件长度为10或长度为100时调用.then子句。

Promise.all()通过将.then()处理程序附加到您传递它的每个承诺来执行它的工作,然后它监视它们的进度。它维护一个计数器,以跟踪您传递的每个承诺何时得到解决。


0
投票

Promise.all创建并返回一个包含所提供的promise数组的新promise。它将跟踪有多少内部承诺已经解决。一旦所有100个解决了,包装器承诺就会解决。

© www.soinside.com 2019 - 2024. All rights reserved.