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

时间:2016-04-15 21:30:52

标签: javascript asynchronous collections promise

我正在盯着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子句。

2 个答案:

答案 0 :(得分:1)

  

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

Promise.all()返回一个新承诺,该承诺具有基于您传递给Promise.all()的承诺数组的特定行为。

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

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

  

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

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

答案 1 :(得分:0)

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