手動封裝乙個Promise

2021-10-17 08:56:51 字數 1043 閱讀 5847

本章來自己開發乙個promise實現,提公升非同步程式設計的能力。

首先宣告定義類並宣告promise狀態與值,有以下幾個細節需要注意。

executor為執行者

當執行者出現異常時觸發拒絕狀態

使用靜態屬性儲存狀態值

狀態只能改變一次,所以在resolve與reject新增條件判斷

因為 resolve或rejected方法在executor中呼叫,作用域也是executor作用域,這會造成this指向window,現在我們使用的是class定義,this為undefined。

class

hdcatch

(error)}

resolve

(value))}

)}}reject

(value))}

)}}then

(onfulfilled, onrejected)if(

typeof onrejected !=

"function"

)return

newhd

((resolve, reject)

=>

else

}catch

(error)}

, onrejected: value =>

else

}catch

(error)}

});}

;if(this

.status ==hd.

fulfilled

)else

}catch

(error)}

)}if(

this

.status ==hd.

rejected

)else

}catch

(error)}

)}})

}static

resolve

(value)

else})

}static

reject

(reason)

}}

手動實現乙個promise 及all 等api功能

const pending pending const resolve resolve const rejected rejected class mypromise catch error static mypromise狀態 value 成功 的值 fail 失敗 的值 static pendi...

手寫乙個Promise

js物件導向 在js中一切皆物件,但js並不是一種真正的物件導向 oop 的語言,因為它缺少類 class 的概念。雖然es6引入了class和extends,使我們能夠輕易地實現類和繼承。但js並不存在真實的類,js的類是通過函式以及原型鏈機制模擬的,本小節的就來 如何在es5環境下利用函式和原型...

手寫乙個promise

promise a 規範 注 以下 沒有通過promises aplus tests的全部測試,但基本功能還是全的 測試結果 864 passing,8 failing 另外可以參考這個指南中的 promise實現 promise resolve 100 規範 class mypromise con...