原生JS實現Promise
阿新 • • 發佈:2018-07-12
== ons 特點 UNC nbsp this 如果 pre scrip
ES6中Promise可以說很大情況下改善了異步回調的嵌套問題,那麽如果我們自己去寫一個類似Promise的庫應該怎麽去寫?
我們先看一下Promise的特點:
第一:Promise構造函數接受一個函數作為參數,函數裏面有兩個參數resolve和reject分別作為執行成功或者執行失敗的函數
var promise=new Promsie(function(resolve,rejec){
if(/*異步執行成功*/){
resolve(value);
}else{
reject(error);
}
})
第二:可以通過then設置操作成功之後的操作,接受兩個函數作為參數
.then(function(){
//回調執行成功之後的操作
},function(){
//回調執行失敗之後的操作,可以沒有
});
那麽原生js實現以上特點應該比較簡單了
function PromiseM(){
this.status=‘pending‘;
this.msg=‘‘;
var process=arguments[0];
var that=this;
process(function(){
that.status=‘resolve‘;
that.msg=arguments[0];
},function(){
that.status =‘reject‘;
that.msg=arguments[0];
});
return this;
}
PromiseM.prototype.then=function(){
if(this.status==‘resolve‘){
arguments[0](this.msg);
}
if(this.status==‘reject‘&&arguments[1]){
arguments[1](this.msg);
}
}
//測試用例
var mm=new PromiseM(function(resolve,reject){
resolve( ‘123‘);//123其實就是第二個arguments[0]
});//上面的第一個arguments[0]
mm.then(function(success){
console.log(success);//該success其實就是上面的this.msg
console.log("ok!");
},function(){
console.log(‘fail!‘);
});
//123
//ok
以上只是最基本的實現,在代碼結構結構和容錯方面沒有進行考慮。
原生JS實現Promise