自己实现最基础的promise
没事自己手写了一下
let pi=new Promise((resolve,reject)=>{
resolve(100);
reject(0);
})
p1.then(result=>{
console.log('成功'+result)
},reason=>{
console.log('失败'+reason)
})
console.log('ok')
//打印出来是
ok
成功+100
class MyPromise{
constructor(executor){
//初始状态
this.status='pending';
this.value=undefined;
//来控制执行resolve和reject的时候执行对应then里的函数方法
this.resolveArr=[];
this.rejectArr=[];
//执行的改变状态的方法
let changeStaus=(status,result)=>{
if(this.status!=='pending') return; //2,如果有一个执行了,下一个不会执行
this.status=status;
this.value=result;
let arr=status==='rejected'?this.rejectArr:this.resolveArr
//执行resolve函数
arr.map(item=>{
if(typeof item==='function'){
item(this.value);
}
})
}
//改变状态函数
let resolve=(result)=>{
if(this.resolveArr.length>0){
changeStaus('resolved',result);
return;
}
let delayTimer=setTimeout(()=>{
clearTimeout(delayTimer);
changeStaus('resolved',result);
},0)
}; //resolve(100)
let reject=(reason)=>{
if(this.rejectArr.length>0){
changeStaus('rejected',reason);
return;
}
let delayTimer=setTimeout(()=>{
changeStaus('rejected',reason);
},0)
}; //reject('错误信息')
//这里需要处理一下异常错误
try{
executor(resolve,reject); //执行函数
}catch(error){
reject(error)
}
}
//添加方法
then(resolveFn,rejectFn){
this.resolveArr.push(resolveFn);
this.rejectArr.push(rejectFn);
}
}
module.exports=MyPromise;
版权声明:本文由Web学习之路发布,如需转载请注明出处。