首页 > 其他 > 详细

手写Promise自定义封装 then 函数

时间:2021-04-24 20:49:35      阅读:51      评论:0      收藏:0      [点我收藏+]

Promise 自定义封装 then 函数

<script src="./Promise.js"></script>
<script type="text/javascript">
    let p = new Promise((resolve, reject) => {
        resolve(‘ok‘);
    })
    p.then(res => {
        console.log(‘res‘, res)
    }, err => {
        console.log(err)
    })
</script>
我们现在发现,then方法中压根就没有输出内容;
是因为我们对then函数没有进行封装;
所以现在我们需要对then函数进行一次封装了
怎么封装了???????????、

31 自定义封装 then 方法执行回调

function Promise(executor){
    const self=this;
    function resolve(data){
        // 如果状态发生改变就直接返回(为了让Promise的状态只发生一次改变);
        if( self.PromiseStatus!==‘pending‘) return
        self.PromiseStatus=‘resolved‘;
        self.PromiseValue=data;
    }
    // 同样声明成为一个函数;修改状态
    function reject(err){
        // 如果状态发生改变就直接返回(为了让Promise的状态只发生一次改变);
        if( self.PromiseStatus!==‘pending‘) return
        self.PromiseStatus=‘rejected‘;
        self.PromiseValue=err;
    }
    this.PromiseStatus =‘pending‘ ;
    this.PromiseValue =null;

    // 对异常进行处理;使用try catch
    try{
        executor(resolve,reject);
    }catch(err){
        reject(err);
    }
}
// 自定义封装then方法执行回调
Promise.prototype.then=function(onResolve,onReject){
    //下面的this是指向实例对象p的哈;
    //{PromiseStatus:"resolved"PromiseValue:"ok"}
    if(this.PromiseStatus===‘resolved‘){
        onResolve(this.PromiseValue)
    }
    if(this.PromiseStatus===‘rejected‘){
        onReject(this.PromiseValue)
    }
}

手写Promise自定义封装 then 函数

原文:https://www.cnblogs.com/IwishIcould/p/14697777.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!