linux centos7.6下 安裝redis
阿新 • • 發佈:2021-10-18
手寫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