手寫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
constructor調用傳入的函數,把resolve/reject傳進去
先從then方法入手
catch方法比較簡單
resolve/reject