// 聲明三種狀態(tài)機
const STATUS = {
PENDING: 0,
FULFILLED: 1,
REJECTED: 2
}
function Promise(exector){
this.status = STATUS.PEDNDING
// resolve返回的數(shù)據
this.resolveData = null
// reject返回的數(shù)據
this.rejectData = null
// 緩存成功回調的函數(shù)
this.onFulfilledList = []
// 緩存失敗回調的函數(shù)
this.onRejectedList = []
let self = this;
// 成功時執(zhí)行
function onResolve(resolveData){
if(self.status === STATUS.PENDING){
self.resolveData = resolveData
self.status = STATUS.FULFILLED
self.onFulfilledList.forEach(fn=>fn())
}
}
//失敗時執(zhí)行
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)
}
// 如果異步執(zhí)行則為pending 狀態(tài)
if(this.status === STATUS.PENDING){
// 保存回調函數(shù)
this.onFulfilledList.push(()=>{
onSucess(self.resolveData)
})
this.onRejectedList.push(()=>{
onError(self.rejectData)
})
}
}
手寫一個promise
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門膘魄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來穿稳,“玉大人呛凶,你說我怎么就攤上這事哑芹∏仗” “怎么了履恩?”我有些...
- 文/不壞的土叔 我叫張陵识脆,是天一觀的道長甸祭。 經常有香客問我缕碎,道長,這世上最難降的妖魔是什么淋叶? 我笑而不...
- 正文 為了忘掉前任阎曹,我火速辦了婚禮伪阶,結果婚禮上,老公的妹妹穿的比我還像新娘处嫌。我一直安慰自己栅贴,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布熏迹。 她就那樣靜靜地躺著檐薯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪注暗。 梳的紋絲不亂的頭發(fā)上坛缕,一...
- 文/蒼蘭香墨 我猛地睜開眼寇仓,長吁一口氣:“原來是場噩夢啊……” “哼举户!你這毒婦竟也來了?” 一聲冷哼從身側響起遍烦,我...
- 正文 年R本政府宣布捅暴,位于F島的核電站恬砂,受9級特大地震影響,放射性物質發(fā)生泄漏蓬痒。R本人自食惡果不足惜泻骤,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狱掂,春花似錦演痒、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至器虾,卻和暖如春讯嫂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兆沙。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 不要被then需要異步執(zhí)行嚇到了,then傳入的是個函數(shù)诀诊,什么時候調用洞渤,應該由第一次回調決定靜態(tài)的all、race...
- 這里我們先啰嗦一下Promise的概念:什么是promise Promise 是異步編程的一種解決方案属瓣,比傳統(tǒng)的解...
- 前言 JSONP以前研究過载迄,最近又有點忘了,寫篇本文mark一下抡蛙,旨在理解記住JSONP的原理及其實現(xiàn)护昧。代碼實現(xiàn)用...
- Promise標準了解一下 傳送門1?? ??Promises/A+規(guī)范 傳送門2?? ??阮一峰前輩ECMAScri...