如何在promise.all中访问已解析的promises es6

时间:2017-05-06 18:15:29

标签: javascript promise

我试图在有可能失败的情况下运行几个承诺。在一个失败的情况下,我如何找出哪一个失败并仍然能够访问未失败的承诺的结果?

现在,我正在使用Promise.all,但如果任何承诺失败,Promise.all会自动进入catch错误块,因此我无法访问.then块中的任何内容所以我无法访问任何成功的承诺结果。有人可以帮忙吗?

我的小提琴:https://jsfiddle.net/9u2nL7zj/

我的代码:

let promise1 = new Promise((resolve, reject) => {
  console.log('-uno-')
  resolve('-promise 1 success')
})

let promise2 = new Promise((resolve, reject) => {
  console.log('-dos-')
  reject('-promise 2 fail')
})

let promise3 = new Promise((resolve, reject) => {
  console.log('-tres-')
  reject('-promise 3 fail')
})


let promise4 = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('-cuatro-')
    resolve('-promise 4 success-')
  }, 3000)
})


Promise.all([promise1, promise2, promise3, promise4]).then((res) => {
  console.log('--done--', res)
}).catch((err) => {
  console.log('--err--', err)
})

1 个答案:

答案 0 :(得分:0)

看起来Promise.all似乎不是解决这个问题的最好方法。来自MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all):

  

如果任何传入的承诺拒绝,Promise.all会立即拒绝拒绝的承诺的价值,无论其他承诺是否已经解决。

所以Promise.all()适用于需要解决的每个承诺的情况。是否有理由要求所有人一起解决。如果没有,最好只给每个承诺它.then()和.catch()块。