是否有可能在Promise.all中捕获所有被拒绝的承诺?

Chr*_*s_F 4 javascript ecmascript-6 es6-promise

鉴于以下内容

Promise.all(promises).then(resolved => {
    ...
}).catch(rejected => {
    ...
});
Run Code Online (Sandbox Code Playgroud)

rejected只会包含被拒绝的第一个承诺.有没有办法捕捉所有被拒绝的承诺?

小智 15

当然,这样做需要等到所有输入承诺都已解决.只要有一个待定,可能会拒绝,你就不能确定你有所有的拒绝!

所以你可以使用Promise.all,但是在转换输入promises以便捕获拒绝并识别它们之后,可能将它们包装在一个Error对象中,就像在

caughtPromises = promises.map(promise => promise.catch(Error));
Run Code Online (Sandbox Code Playgroud)

现在过滤结果Promise.all以找到标识为失败的结果:

Promise.all(caughtPromises)
  .then(results => results.filter(result => result instanceof Error))
Run Code Online (Sandbox Code Playgroud)

etvoilà.