// 聲明三種狀態機
const STATUS = {
PENDING: 0,
FULFILLED: 1,
REJECTED: 2
}
function Promise(exector){
this.status = STATUS.PEDNDING
// resolve返回的數據
this.resolveData = null
// reject返回的數據
this.rejectData = null
// 緩存成功回調的函數
this.onFulfilledList = []
// 緩存失敗回調的函數
this.onRejectedList = []
let self = this;
// 成功時執行
function onResolve(resolveData){
if(self.status === STATUS.PENDING){
self.resolveData = resolveData
self.status = STATUS.FULFILLED
self.onFulfilledList.forEach(fn=>fn())
}
}
//失敗時執行
function onReject(rejectData ){
if(self.status === STATUS.PENDING){
self.rejectData = rejectData
self.status = STATUS.REJECTED
self.onRejectedList.forEach(fn=fn())
}
}
try {
exector(onResolve, onReject)
}catch(e){
onReject(e)
}
}
// 添加then 方法
Promise.prototype.then = function(onSucess, onError){
let self = this
if(this.status === STATUS.FULFILLED){
onSucess(self.resolveData)
}
if(this.status === STATUS.REJECTED){
onError(self.rejectData)
}
// 如果異步執行則為pending 狀態
if(this.status === STATUS.PENDING){
// 保存回調函數
this.onFulfilledList.push(()=>{
onSucess(self.resolveData)
})
this.onRejectedList.push(()=>{
onError(self.rejectData)
})
}
}
手寫一個promise
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 這里我們先啰嗦一下Promise的概念:什么是promise Promise 是異步編程的一種解決方案,比傳統的解...
- 前言 JSONP以前研究過,最近又有點忘了,寫篇本文mark一下,旨在理解記住JSONP的原理及其實現。代碼實現用...
- Promise標準了解一下 傳送門1?? ??Promises/A+規范 傳送門2?? ??阮一峰前輩ECMAScri...