Promise.all 異常/出錯一般情況下,all里傳promise數組,但是只要有一個出錯,
就會進入到catch里,不會捕獲到正常數據的,所以我們要改寫下,實現正常和錯誤的結果都能處理
function P(error = false) {
return new Promise((res, rej) => {
if (error) {
rej('error')
} else {
res('right')
}
})
}
var a = P() //成功的Promise
var b = P(true) // 失敗的promise
Promise.all(
// promise數組,經過下面處理還是promise
[a, b].map((p) => {
//這里的紅色字體沒有什么作用,返回的依舊是成功的promise,我們優化,將他刪除
return p.then(function(res) {
return res })
.catch(error => error)
})
)
.then(res => {
console.log(res, 'res')
})
.catch(error => {
console.log(error, 'error')
})
//這里是優化過的代碼
Promise.all(
[a, b].map((p) => {
return p.catch(error => error)
})
)
.then(res => {
console.log(res, 'res')
})
.catch(error => {
console.log(error, 'error')
})