promise

原理:

 function PromiseFn(callBack){
    try{
        callBack(resolve,reject)
    }catch(e){
        reject()
    }
    let self = this;
    self.resolveVal = undefined;
    self.rejectVal = undefined;
    self.status = 'pending'//默认是等待状态
    self.keepResolveFn = []//
    self.keepRejectFn = []//
     
    function resolve(val){
        if(self.status === 'pending'){
            self.resolveVal = val;
            self.status = 'resolve';
            self.keepResolveFn.forEach(fn=>fn());
        }
    }
    function reject(val){
        if(self.status === 'pending'){
            self.rejectVal = val;
            self.status = 'reject';
            self.keepRejectFn.forEach(fn=>fn());
        }
    }
    //执行先记录resolve和reject函数事件
     
}
PromiseFn.prototype.then = function(resolveFunction,rejectFunction){
    let self = this;
    if(self.status === 'resolve'){
        resolveFunction(self.resolveVal)
    }
    if(self.status === 'reject'){
        rejectFunction(self.rejectVal)
    }
    if(self.status === 'pending'){
        self.keepResolveFn.push(()=>{
            resolveFunction(self.resolveVal);
        });
        self.keepRejectFn.push(()=>{
            rejectFunction(self.rejectVal)
        });
    }
}
let promiseA = new PromiseFn((resolve,reject)=>{
    setTimeout(function(){
        resolve('成功啦')
    },2000)
})
promiseA.then((resolveVal)=>{
    console.log('resolve'+resolveVal)
},(rejectVal)=>{
    console.log('reject'+rejectVal)
})

 

posted on 2022-08-10 10:00  马玉豪  阅读(24)  评论(0)    收藏  举报

导航