我试图在有可能失败的情况下运行几个承诺。在一个失败的情况下,我如何找出哪一个失败并仍然能够访问未失败的承诺的结果?
现在,我正在使用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)
})
答案 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()块。