一瓶肥宅水的时间,上手promise原理(1)

一瓶肥宅水的时间,上手promise原理(1)

随着ES6的标准出现,promise就成为了处理异步操作的新宠,越来越多的前端工程师选择用promise来处理异步,解决回调地狱的方案。今天就来聊一聊promise的原理,自己手写实现promise。

1、我们可以确定的是promise是一个对象的形式被new出来。

class Promise {}

2、我们要知道,在promise中有三种状态,分别为pending、fulfilled、rejected,代表等待,成功,失败。

class Promise {
    static PENDING = 'pending';
    static FULFILLED = 'fulfilled';
    static REJECTED = 'rejected';
}

3、我们知道在new promise的时候 ,会在初始化时设置初始status,返回值,传入参数,这个参数是一个function,这个参数接受resolve,reject两个方法作为参数。

class Promise {
    static PENDING = 'pending';
    static FULFILLED = 'fulfilled';
    static REJECTED = 'rejected';
	constructor(executor){
        this.status = promise.PENDING;
        this.value = null;
       executor(this.resolve.bind(this),this.reject.bind(this))
    }
	resolve(value){
        this.status = Promise.FUFILLED;
        this.value=value;
    }
	reject(reason){
        this.status=Promise.REJECTED;
        this.value=reason
    }
}

4、因为在promise中,状态是不可逆的,所以resolve和rejected需要添加判断,只有在状态为pending的情况才会去处理

resolve(value){
    if(this.status ==Promise.PENDING){
        this.status = Promise.FUFILLED;
        this.value=value;
    }
}
reject(reason){
    if(this.status == Promise.PENDING){
        this.status=Promise.REJECTED;
        this.value=reason
    }
}

5、有种情况,在你初始化调用executor的时候,去console.log(不存在的值),会报错,我们应该j进行try…catch,将报错信息交给rejected来处理

try {
   executor(this.resolve.bind(this), this.reject.bind(this));
 } catch (error) {
   this.reject(error);
 }

然后测试一下最基本的promise代码实现

<script src="HD.js"></script>
<script>
  let p = new Promise((resolve, reject) => {
    resolve("Hello world");
  });
  console.log(p);
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值