简单介绍一下 Promise,感兴趣者可去查看相关规范
Promise 本质是个状态机。Promise 有三种状态:pending、fulfilled 和 rejected,而每个 Promise 只能有这三种的其中一种状态。状态是可转换的:pending -> fulfilled 或者 pending -> rejected,但是明确!!!状态转换是不可逆的,只能有这两种转换。
then 方法可以被同一个 Promise 调用多次,且必须返回一个 Promise。
为了保证 then 方法中的回调顺序执行,onFulfilled 或者 onRejected 必须异步调用。
当 Promise 执行成功时,调用 then 方法的第一个回调函数,失败时调用 then 方法的第二个回调函数。
首先,接下来的每一步实现,都是在借鉴了很多博主对 Promise 源码的理解和剖析以及 Promise 本身的规范之上做出的自己的总结,等一个简单的雏形完成,你都会有一定的理解
- 第一版:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15function Promise(fn) {
this.state = 'pending'; // Promise 当前的状态
this.data = undefined; // Promise 当前的返回值
this.callbacks = []; // 回调队列
fn(this.resolve, this.reject);
}
Promise.prototype = {
constructor: Promise,
resolve: function(result) {},
reject: function(error) {},
}