1. 程式人生 > 其它 >Promise.all 如何防止某一個promise失敗而使整個promise失敗

Promise.all 如何防止某一個promise失敗而使整個promise失敗

原理:

  由於Promise內部實現中,是否resolve由內部成功陣列的長度和傳入陣列的長度進行比較的,那麼在給失敗的Promise在catch的時候返回一個reolve狀態就可以啦。

上程式碼:

  正常失敗情況:

let p1 = new Promise((resolve, reject) => { 
    setTimeout(resolve, 1000, 'one'); 
}); 
let p2 = new Promise((resolve, reject) => { 
    setTimeout(resolve, 2000, 'two'); 
});
let p3 = new
Promise((resolve, reject) => { setTimeout(resolve, 3000, 'three'); }); let p4 = new Promise((resolve, reject) => { setTimeout(resolve, 4000, 'four'); }); let p5 = new Promise((resolve, reject) => { reject('錯誤'); }) Promise.all([p1, p2, p3, p4, p5]).then(values => { console.log({values}); }, reason
=> { console.log({reason});// reject });

  處理後:

let p1 = new Promise((resolve, reject) => { 
    setTimeout(resolve, 1000, 'one'); 
}); 
let p2 = new Promise((resolve, reject) => { 
    setTimeout(resolve, 2000, 'two'); 
});
let p3 = new Promise((resolve, reject) => {
    setTimeout(resolve, 
3000, 'three'); }); let p4 = new Promise((resolve, reject) => { setTimeout(resolve, 4000, 'four'); }); let p5 = new Promise((resolve, reject) => { reject('錯誤'); }) Promise.all([p1, p2, p3, p4, p5.catch((err) => Promise.resolve(err))]).then(values => { console.log({values}); }, reason => { console.log({reason});// reject });