前言
前一篇有簡單說明 callback function、async / await 。
本篇說明 Promise.all、Promise.allSettled() 的差別。建議可以對非同步已經有一點了解再看~
非同步的種類
Promise.all([…])
- 特性:
- 會等待所有Promise物件都解決(resolve)後才進行(promise.all之外的)下一步
- 可以使用陣列來傳遞Promise物件
- 有失敗優先特性。如果某個Promise物件被拒絕(reject),則整個 Promise.all() 方法也會被拒絕(reject)
- 優點:
- 同時執行多個Promise物件,提高效率
- 如這些非同步事件有相依關係、一個不行就全不要了時,可利用失敗優先特性,讓事件中只要有一個失敗,就會全部拒絕。
- 缺點:
- 就算有錯誤也想跑完陣列中的函式時,失敗優先特性會造成困擾。(可用下面一位,Promise.allSettled())
Promise.allSettled([…])
- 特性:不管結果是成功或失败,會確認一组非同步事件是否都執行了,並回傳各自的結果。
- 優點:適合不須互相影響的事件。
- 情境舉例:網頁載入時同時要打很多支api,這些api彼此在不同區塊作用,只是想讓它們都早點開始跑而已。
- 注意事項:外層要寫async、陣列內包的要也是promise函數。
結語
在優化專案時,這兩個 promise 方法會是你的好幫手,請牢記它們的存在。
這次對 非同步 的整理,對自己也有很大的幫助,希望也有幫助到其他人!
今天就到這,如有說明不周或錯誤的地方,還請多留言討論(鞠躬)。
參考
.all()、.allSettled():
https://ithelp.ithome.com.tw/articles/10276827
https://stackoverflow.com/questions/69984178/async-await-with-jquery-document-ready
https://ithelp.ithome.com.tw/articles/10293058