通过使用promise,可以使异步操作写起来就像是在写同步操作,而无需一层一层地嵌套回调函数。
Promise是一个构造函数,用来创建Promise实例对象,这个构造函数接收一个异步任务作为回调函数,例如
let p=new Promise(function(resolve,reject){
//fn 在这里写相关的异步操作
if(//判断异步操作执行成功){
resolve('value');
}
else{ reject('error');}
});
//fn1代表异步操作执行成功后要执行的函数,fn2代表异步操作执行失败要执行的函数
p.then(fn1(value),fn2(error));
手写promise
function Promise(executor){
this.state="pending";
this.value=undefined;
this.reason=undefined;
let reslove=(value)=>{
if(this.state="pending"){
this.state="fullied";
this.value=value;};
};
let reject=(reason)=>{
if(this.state="pending"){
this.state="reiected";
this.reason=reason;}
};
//如果executor执行报错,直接执行reject
try{
executor(reslove,reject);}
catch(err){ reject(err);};}
手写实现对promise.then()方法的模拟
Promise.prototype.then=function(fn1,fn2){
var self=this;
var promise2;
if(self.status="resolved"){
return promise2=new Promise( function(resolve,reject){
fn1;
});
}
if(self.status="rejected"){
return promise2=new Promise( function(resolve,reject){
fn2;
});
}
};