处理多个承诺拒绝

时间:2019-06-19 13:39:00

标签: javascript promise

This article遍历单个诺言组合器:

Promise.all

Promise.any

Promise.race

Promise.allSettled

但是我看不到的是一种运行所有承诺的方法,但是当一个单独的承诺被拒绝时不会短路。如何确保所有承诺均得到兑现,但我可以处理所有拒绝及其解决方案?

1 个答案:

答案 0 :(得分:4)

您可以在各个承诺中添加catch,以指示您希望错误如何出现在最终结果中。因为catch返回了一个保证,所以当您运行Promise.all时,您将能够得到错误作为结果。例如:

// some promises:
let p = [
    Promise.resolve("val1"),
    Promise.reject("some error"),
    Promise.resolve("val3")
  ]
  
 let results = Promise.all(p.map(pr => 
       pr
       .then(v=> "value: " + v)
       .catch(e => "error: " + e)))  // add catch to prevent errors from stopping all()
  
 results.then(console.log)