promise简单的封装

        const PENDING = 'PENDING';
        const RESOLVED = 'RESOLVED';
        const REJECTED = 'REJECTED'
        class Promise{
            constructor(executor){
                this.status = PENDING;// 默认为等待状态
                this.value = undefined; //成功的原因
                this.reason = undefined; // 失败的原因
                this.resolvedCallbacks = [];// 存放成功的回调函数
                this.rejectedCallbacks = [];// 存放失败的回调函数
                let resolve = (value) => {
                   this.value = value;
                   this.status = RESOLVED;
                   this.resolvedCallbacks.forEach((method)=>{
                       method(this.value);
                   })
                }
                let reject = (reason) => {
                    this.reason = reason;
                    this.status = REJECTED;
                    this.rejectedCallbacks.forEach((method)=>{
                       method(this.reason);
                   })
                }
                try{
                    executor(resolve,resolve)
                }catch(e){
                    console.log(e)
                }    
            }
            then(onfulfilled,onrejected){
                 if( this.status === RESOLVED){
                    onfulfilled(this.value);
                 }
                 if( this.status === REJECTED){
                    onrejected(this.reason);
                 }
                 if( this.status === PENDING){ // 通过发布订阅的方式支持异步
                    this.resolvedCallbacks.push(()=>{
                        onfulfilled(this.value);
                    })
                    this.rejectedCallbacks.push(()=>{
                        onrejected(this.reason);
                    })
                 }
            }
        }
    var psy = new Promise(function(resolve,reject){
        setTimeout(()=>{
             resolve('kkkk') 
        },1000)
         
    })
    psy.then((msg)=>{
             console.log(msg, 'msg');
    },(msg)=>{
        console.log(msg, 'msg');
    })
    </script>;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值