一、整体分析
所谓
Promise就是一个容器,有三个状态:PENDING(进行中)、FULFILLED(成功)、REJECTED(失败),里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,有两大特点:
- 容器状态不受外界影响
- 一旦状态改变就不会再变,任何时候都可以得到这个结果
来看下Promise的用法:
1 | new Promise((resolve, reject) => { |
通过用法不难分析出:
Promise构造函数接受一个函数参数exector,exector接受resolve和reject两个函数并立即执行,通过resolve/reject改变状态.- 状态改变后,触发原型链上的
then catch方法. - Promise类拥有静态方法
resolve、reject、all、race.
那么可以写出大致结构代码:
1 | class Promise { |
之后在此基础上补充代码.
二、实现初版
首先引入三种状态,完善resolve、reject函数,最后在构造函数内执行exector(resolve, reject):
1 | //定义三种状态 |
注意:exector(resolve, reject);执行可能会报错,所以需要使用try包括一下, 有报错reject抛出去.
1 | class Promise { |
此时可以使用then进行捕获了,then接收两个参数,分别对应FULFILLED和REJECTED状态:
1 | new Promise().then( |
注意:then、catch是微任务,这里使用setTimeout模拟:
1 | then(onFulfilled, onRejected) { |
Ok,出版已经完成:
1 | //定义三种状态 |
可以拿数据测试一下:
1 | const promise = new Promise((resolve, reject) => { |
作者:洛霞
链接:https://juejin.im/post/6860037916622913550
来源:掘金