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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么时候然后从Promise.all()的子句运行?相关的知识,希望对你有一定的参考价值。

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

答案

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

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

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

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

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

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

另一答案

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

以上是关于什么时候然后从Promise.all()的子句运行?的主要内容,如果未能解决你的问题,请参考以下文章

Promise.all(...).spread 不是并行运行 Promise 时的函数

Promise.all() 不等待异步进程

面试题系列---什么是Promise,解决什么问题?Promise.all解决了什么问题?实现原理?回调地狱?

将Promise.all与easyPost API一起用于多个跟踪状态请求

将 Promise.all 与 easyPost API 一起用于跟踪状态的多个请求

Promise.all和Promise.race的区别和使用