Promise 與 asnyc-await 的運用
Promise Chain
下列為連續執行任務時,全部成功執行完畢的情況
1 | let task01 = () => { |
Promise Chain 如何截取錯誤
若執行任務過程中有 失敗 的話,就會統一使用 catch
截取錯誤的訊息。
1 | let task01 = () => { |
asnyc-await
下列為連續執行任務時,全部成功執行完畢的情況
1 | async function fn1() { |
asnyc-await 如何截取錯誤
在 Promise 中,我們知道是通過 catch
的方式來捕獲異常,
而當我們使用 async
時,則通過 try/catch
來截取錯誤。
1 | async function fn1() { |
但是依上列情況來說,當有多個 await
時,包太多 try/catch
的話,就會顯示程式碼不好看也不好閱讀
1 | async function fn1() { |
這時我們可以換個寫法,將 try/catch
移位至 function
裡,而不是包在 await
外層
1 | async function fn1() { |
何時要用 Promise 還是 asnyc-await 呢?
先說結論(個人看法):
- 任務有前後關係的話,使用
Promise Chain
寫法 - 任務無前後關係的話,使用
asnyc-await
寫法
下面用不同情況來說明
情境 1
因 task01、task02、task03 有前後關係的話,
執行的順序需要先完成 task01 → task02 → task03,
當執行任務過程中,有錯的話,就不必再繼續往下執行。
1 | let task01 = () => { |
若是我們改用 asnyc-await
寫的話,如下
1 | async function fn1() { |
雖然asnyc-await
一樣可以完成同樣的事情,
不過程式碼與Promise
的寫法來看,就稍微雜亂了一點,
主要是因為執行每個任務時,需要在任務之間,穿插 if
的判斷來確認上個任務是否完成,
才能繼續往下執行,不像Promise
統一使用一個 catch
截取錯誤的訊息。
情境 2
若任務沒有相依關係的話,使用 asnyc-await
的寫法,這樣程式碼看起來就簡潔一點。
1 | async function fn1() { |