雖說用 Promise.all 方法來處理「非同步獲取資料」的場景,不過一旦中途有某個函式發生錯誤,就會全部無效,徒留一個錯誤結果。現在改用 Promise.allSettled 方法便可解決這個困擾,讓成功的部份不會浪費掉。
內容
簡言之,Promise.allSettled 不會有處理 reject 的問題。無論 Promise 的運行結果是成功還是失敗,你都可以根據 status 來獲取到。
程式碼
1 2 3 4 5 6 7 8 |
const delay = n => new Promise(resolve => setTimeout(resolve, n)); const promises = [ delay(100).then(() => 1), delay(200).then(() => 2), Promise.reject(3) ] Promise.allSettled(promises).then(values=>console.log(values)) |
參考資料
1. Promise.all和Promise.allSettled的区别
2. Can I Use: JavaScript built-in: Promise: allSettled()