【发布时间】:2017-09-21 15:44:13
【问题描述】:
如果构建了一组承诺然后将其传递给Promise.all,是立即开始执行还是只在调用Promise.all 时开始执行?
示例代码:
let promises: Promise<string> [] = [this.methodCall(), this.methodCall(), this.methodCall()];
Promise.all(promises).then(values => {
...
}).catch(error => {
...
});
另外,这个代码示例会捕获所有拒绝吗?
【问题讨论】:
-
关于你的第二个问题......也许只是阅读documentation? 它以第一个拒绝的承诺的原因拒绝。
-
“它以第一个拒绝的承诺的原因拒绝”,我认为这意味着它仍然处理其他承诺拒绝。
-
Promise.all()与任何其他 Promise 函数一样,只会返回一个解析或拒绝类型的结果。因此,一旦传递给Promise.all()的任何一个承诺被拒绝,它将立即返回拒绝,您不应该等待或期待任何其他解决方案。如果您需要单独处理拒绝,那么您可能需要通过其他方式(如减少等)对您的承诺进行排序。 -
可以
Promise.all()导致UnhandledPromiseRejectionWarning,因为多个承诺可能会被拒绝? -
我“猜测”
UnhandledPromiseRejectionWarning和Uncaught (in promise)可能是同一件事(node vs chrome),这可能不适用于Promise.all()中剩余的拒绝承诺。这是关于你不是.catch()ing 拒绝。
标签: javascript typescript promise