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   马玉豪  阅读(16)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示