一行代碼干掉 Promise.all!JavaScript 異步編程的終極簡(jiǎn)化!
處理異步操作已經(jīng)成為了 JavaScript 日常編碼的核心部分。隨著應(yīng)用復(fù)雜度的增加,我們經(jīng)常需要并發(fā)執(zhí)行多個(gè)異步任務(wù)并合理處理它們的結(jié)果。長(zhǎng)期以來(lái),Promise.all() 一直是我們處理并發(fā) Promise 的首選方法,但它存在一個(gè)致命缺陷:一旦任何一個(gè) Promise 被拒絕(rejected),整個(gè)操作就會(huì)失敗。

Promise.all 的局限性
讓我們先回顧一下 Promise.all() 的工作方式及其局限性:

這種方法的主要問(wèn)題在于:
- 任何一個(gè) Promise 失敗都會(huì)導(dǎo)致整個(gè)操作失敗
- 你無(wú)法知道哪些操作成功,哪些失敗
- 你無(wú)法獲取成功操作的結(jié)果
在實(shí)際應(yīng)用中,我們通常希望即使某些操作失敗,也能繼續(xù)處理成功的結(jié)果。例如,在加載儀表板組件時(shí),即使某個(gè)組件的數(shù)據(jù)獲取失敗,我們也希望顯示其他組件。
Promise.allSettled 來(lái)拯救
Promise.allSettled() 解決了上述所有問(wèn)題。它會(huì)等待所有 Promise 完成(無(wú)論成功或失?。⒎祷匾粋€(gè)包含每個(gè) Promise 結(jié)果的數(shù)組:

Promise.allSettled 返回值結(jié)構(gòu)
Promise.allSettled() 的返回值是一個(gè)數(shù)組,每個(gè)元素對(duì)應(yīng)一個(gè) Promise 的結(jié)果,具有以下結(jié)構(gòu):
- 對(duì)于成功的 Promise:{ status: 'fulfilled', value: 結(jié)果值 }
- 對(duì)于失敗的 Promise:{ status: 'rejected', reason: 錯(cuò)誤原因 }
這種統(tǒng)一的結(jié)構(gòu)使得處理結(jié)果變得簡(jiǎn)單明了。尤其在需要并發(fā)執(zhí)行多個(gè)獨(dú)立異步操作,并且希望無(wú)論個(gè)別操作成功與否都能獲取完整結(jié)果的場(chǎng)景中,Promise.allSettled() 無(wú)疑是最佳選擇。它使我們能夠構(gòu)建更具彈性的應(yīng)用程序,優(yōu)雅地處理現(xiàn)實(shí)世界中不可避免的錯(cuò)誤和異常情況。































