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
以上只是最基本的实现,在代码结构结构和容错方面没有进行考虑。
原文地址:https://www.cnblogs.com/goloving/p/9297308.html
时间: 2024-10-10 06:54:15