我想在可能會失敗的情況下運行幾個承諾。在一個失敗的情況下,我怎麼知道哪一個失敗了,仍然能夠訪問沒有失敗的promise的結果?如何在promise.all中訪問已解析的承諾es6
現在,我使用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)
})
如果我理解正確,你想訪問所有已解決Promise的結果,即使有一個失敗的結果(包括那些失敗後可能解決的結果,否則它會很複雜) - 所以基本上你想要等待所有,對吧?對我來說,這聽起來非常像[那個問題](http://stackoverflow.com/q/31424561/6730571)。 'Promise.all'意味着所有人都必須解決。你想要的是類似[Q](https://github.com/kriskowal/q/wiki/API-Reference#promiseallsettled)的Promise.allSettled,但這不是標準的,它是一個庫。 –