浅谈Promise

简单介绍一下 Promise,感兴趣者可去查看相关规范

  1. Promise 本质是个状态机。Promise 有三种状态:pending、fulfilled 和 rejected,而每个 Promise 只能有这三种的其中一种状态。状态是可转换的:pending -> fulfilled 或者 pending -> rejected,但是明确!!!状态转换是不可逆的,只能有这两种转换。

  2. then 方法可以被同一个 Promise 调用多次,且必须返回一个 Promise。

  3. 为了保证 then 方法中的回调顺序执行,onFulfilled 或者 onRejected 必须异步调用。

  4. 当 Promise 执行成功时,调用 then 方法的第一个回调函数,失败时调用 then 方法的第二个回调函数。

首先,接下来的每一步实现,都是在借鉴了很多博主对 Promise 源码的理解和剖析以及 Promise 本身的规范之上做出的自己的总结,等一个简单的雏形完成,你都会有一定的理解

  • 第一版:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function 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) {},
    }