javascript - 如何在 Promise.all 中访问已解决的 Promise es6

标签 javascript promise

我正在尝试执行多个有可能失败的 promise 。万一失败了,我如何找出哪一个失败了,并且仍然能够访问未失败的 Promise 的结果?

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

我的 fiddle :Wait until all promises complete even if some rejected

我的代码:

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)
})

最佳答案

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

If any of the passed-in promises reject, Promise.all immediately rejects with the value of the promise that rejected, whether or not the other promises have resolved.

所以 Promise.all() 适用于需要解决每个 Promise 的情况。您是否有理由需要将它们全部一起解决?如果没有,最好只给每个 Promise 自己的 .then() 和 .catch() block 。

关于javascript - 如何在 Promise.all 中访问已解决的 Promise es6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43823860/

相关文章:

javascript - 在 Angular Js 中重新加载后,如何将复选框(选中或未选中)从 javascript Controller 更新为 html 页面?

javascript - NodeJS 让 Promise 等待 foreach 循环完成

javascript - 解析调用自己函数的 Promise

javascript - async/await 会阻塞事件循环吗?

javascript - LocalStorage 是 HTML5 功能吗?如果是这样,为什么 IE8 和 IE9 支持它?

javascript - 通过 Javascript 根据源返回字符串

javascript - 按类对元素进行 react 渲染

Javascript:相邻元素乘积算法

javascript - Promise 返回空值,尽管它存在于数据库中

javascript - 具有多个值的 Promise.map