promise 4 原始碼實現實現

2021-10-07 17:52:01 字數 1418 閱讀 3706

promise

promise 天生是乙個類,類中需要傳入乙個 executor 執行器,缺省會立即執行

promise 內部會提供兩個方法,可以更改 promise 的狀態

promise 總共有三種狀態 (等待態 成功態 失敗態)

3-1. resolve 觸發成功

3-2. reject 觸發失敗

promise 一旦成功就不會走失敗,反之同理

promise 中實現鏈式呼叫主要靠返回乙個新的 promise

const pending = 'pending'

const resolved = 'resolved'

const rejected = 'rejected'

function resolvepromise(promise2, x, resolve, reject)

// 2. 判斷 x 的型別

let called; // 遮蔽多次呼叫

if((typeof x === 'object' && x != null) || typeof x === 'function') , (r) => )

} else

} catch (e)

} else

}class promise

}let reject = (reason) =>

}try catch (e)

}catch(errcallback)

then(onfulfilled, onrejected)

let promise2 = new promise((resolve, reject) => catch (e)

}, 0);

}if(this.state == rejected) catch (e)

}, 0);

}if(this.state == pending) catch (e)

}, 0);

})this.onrejectedcallbacks.push(() => catch (e)

}, 0);})}

})return promise2

}}/**

* 1. 測試 promise 規範的指令碼

* 全域性安裝 npm i -g promises-aplus-tests

* 根目錄下執行 promises-aplus-tests promise.js

*/ promise.defer = promise.deferred = function()

dfd.promise = new promise((resolve, reject) => )

return dfd

}module.exports = promise

簡易版promise原始碼實現

首先我們先看一下promise是如何使用的 通過promise構建出來的物件有三種狀態,pending 進行中 fulfilled 已成功 rejected 已失敗 狀態只能由 pending 變為 fulfilled 或由 pending 變為 rejected 且狀態改變之後不會在發生變化,會一...

非同步解決方案promise及原始碼實現

js語言的特性,造就了特別的非同步處理方式,我記得以前用的最多的就是 函式,那個時候寫jquery的ajax時候,特別喜歡寫這種 ajax 後乙個ajax的傳送需要依賴前面的ajax的返回,也許有的朋友說還好啊,其實一兩個確實還好,但是多了就比較暈。不直觀。後面除錯起來有點麻煩。後來很多瀏覽器就自己...

vuex原始碼實現

let vue 自定義foreach迴圈 author suzhe datetime 2019 07 28t11 12 17 0800 param obj description param classback description const foreach obj,classback 格式化模...