首页 > Web开发 > 详细

原生JS实现Promise

时间:2018-07-11 23:46:13      阅读:365      评论:0      收藏:0      [点我收藏+]

  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

原文:https://www.cnblogs.com/goloving/p/9297308.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!