1. 程式人生 > >原生JS實現Promise

原生JS實現Promise

== 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