iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
自我挑戰組

JS 加強筆記系列 第 26

Day 26:promise 實作 (4)

  • 分享至 

  • xImage
  •  

Exceptions

使用 promise 時可以在 then 方法中放入自訂的處理函式,而預期的錯誤處理是把函式中的錯誤都當作 promise rejection,很直覺的作法就是在呼叫函式時加上 try...catch,有錯時呼叫 reject

onFulfilled 為例,可以寫成這樣:

then(onFulfilled, onRejected) {
    ···
    let fulfilledTask;
    if (typeof onFulfilled === 'function') {
        fulfilledTask = function () {
            try {
                const r = onFulfilled(self.promiseResult);
                returnValue.resolve(r);
            } catch (e) {
                returnValue.reject(e);
            }
        };
    } else {
        fulfilledTask = function () {
            returnValue.resolve(self.promiseResult);
        };
    }
    ···
}

以上 promise 實作差不多告一段落,像一開始所說,這個實作是把 resolve 和 reject 當作方法,如果想要像真正的 promise 一樣把它們做成建構式的 callback 參數,可以參考這段 revealing constructor pattern

這是書裡附的實作 repo:DemoPromise。另外這段統整了 promise 的一些優點和限制,可以參考。

關於 promise 本身大概寫到這邊,最後還有一點 promise 以外、關於 macrotask 和 microtask 的內容 (雖然這塊很想逃避,但終究還是要寫一下)。


上一篇
Day 25:promise 實作 (3)
下一篇
Day 27:如何中斷 forEach
系列文
JS 加強筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言