class Mypromise {
constructor(cb) {
this.status = 'pending';
this.data = null;
this.resolveArr = [];
this.rejecteArr = [];
this.resolve = val => {
if (this.status === 'pending') {
this.status = 'fulfilled';
this.data = val
this.resolveArr.forEach(cbs=> {
cbs();
})
}
}
this.reject = err => {
if (this.status === 'pending') {
this.status = 'rejected';
this.data = err
this.rejecteArr.forEach(cbs => {
cbs();
})
}
}
cb(this.resolve, this.reject);
}
then(success, fail) {
success = typeof success === 'function' ? success : function (val) { return val };
fail = typeof fail === 'function' ? fail : function (val) { return val };
// 得考慮三種狀態(tài)
// 等待的狀態(tài)
if (this.status === 'pending') {
// 成功集合
this.resolveArr.push(() => {
success(this.data);
});
// 失敗的集合
this.rejecteArr.push(() => {
fail(this.data);
});
}
// 成功的狀態(tài)
if (this.status === 'fulfilled') {
success(this.data);
}
// 失敗的狀態(tài)
if (this.status === 'rejected') {
fail(this.data);
}
}
catch(fail){
this.then(null, fail);
}
}
// 自己的
let mpro = new Mypromise(function (resolve, reject) {
// 同步
// resolve(1);
// reject(0);
// 異步
setTimeout(() => {
resolve(22222);
// reject(-1);
},1000);
});
mpro.then((data) => {
console.log(data, '成功了');
}, (err) => {
console.log(err, '失敗了');
});
mpro.catch((err) => {
console.log(err, 'err');
});
封裝Promise
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門哥力,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人墩弯,你說我怎么就攤上這事吩跋。” “怎么了渔工?”我有些...
- 文/不壞的土叔 我叫張陵锌钮,是天一觀的道長。 經(jīng)常有香客問我引矩,道長梁丘,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任旺韭,我火速辦了婚禮氛谜,結果婚禮上,老公的妹妹穿的比我還像新娘区端。我一直安慰自己值漫,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布织盼。 她就那樣靜靜地躺著杨何,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沥邻。 梳的紋絲不亂的頭發(fā)上危虱,一...
- 文/蒼蘭香墨 我猛地睜開眼近弟,長吁一口氣:“原來是場噩夢啊……” “哼缅糟!你這毒婦竟也來了?” 一聲冷哼從身側響起祷愉,我...
- 正文 年R本政府宣布定踱,位于F島的核電站,受9級特大地震影響恃鞋,放射性物質發(fā)生泄漏崖媚。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一恤浪、第九天 我趴在偏房一處隱蔽的房頂上張望至扰。 院中可真熱鬧,春花似錦资锰、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至濒募,卻和暖如春鞭盟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瑰剃。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 加載圖片,用promise resolve(img) 有兩個作用, 一個是 改變狀態(tài),聲明狀態(tài)另一個是將返回值傳遞...
- 丁老師學習名言你用你會的知識去解釋他, => 解釋通了, 你就明白了=> 解釋不通, 該學習了!! 繼續(xù).. ...
- 參考資源:【翻譯】Promises/A+規(guī)范-圖靈社區(qū) BAT前端經(jīng)典面試問題:史上最最最詳細的手寫Promise...