天天看點

手寫promise

手寫promise

promise 本身是同步

真正的異步是你自己在promise内部寫的代碼

開始實作promise

大概邏輯

1. 執行個體化構造函數,構造函數内部調用傳入的function,把resolve和reject傳給function

2. 緊接着調用then方法,把then方法上的一些函數儲存起來:(成功函數,失敗函數),最終then傳回了一個promise,是以還要存儲一個promise執行個體

  2.1 如果是鍊式調用then,則全部調用,把需要的函數全部存儲起來

3. 接着是你調用resolve或者reject。promise内部修改狀态pending --> fulfilled 表示成功,如果調用reject則狀态被修改為 rejected 表示失敗,狀态是不可逆的,隻能改一次,保證resolve和reject函數隻被調用一次

4. 之後在resolve和reject函數内部使用異步處理(這裡是為了防止resolve/reject 同步調用時 ,處理then方法勞動成果的代碼執行在then方法之前,導緻拿不到then方法的勞動成果)

5. 處理then方法的成功/失敗函數,将resolve/reject的結果傳入成功函數,并接收傳回值,作為下一個then方法的結果傳給promise.resolve,reject函數不接收傳回值,直接調用目前then方法的失敗函數,把錯誤抛出去

開始實作

先簡單實作promise的這幾個方法:

resolve

reject

then

catch

手寫promise

constructor調用傳入的函數,把resolve/reject傳進去

手寫promise

先從then方法入手

手寫promise

catch方法比較簡單

手寫promise

resolve/reject

手寫promise

繼續閱讀