iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0

前言

前一篇有簡單說明 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


上一篇
關於非同步-1
下一篇
關於發api請求的方法
系列文
前端菜雞_賀周歲成長日誌31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言