SOURCE

// 先定义三个常量表示状态
const promiseStatus = {
    PENDING: "pending",
    FULFILLED: "fulfilled",
    REJECTED: "rejected"
}

class myPromise {
    constructor(executor) {
        // executor 是一个执行器,进入会立即执行
        // 并传入resolve和reject方法
        executor(this.resolve, this.reject)
    }
    // 储存状态的变量,初始值是 pending
    status = promiseStatus.PENDING;

    // resolve和reject为什么要用箭头函数?
    // 如果直接调用的话,普通函数this指向的是window或者undefined
    // 用箭头函数就可以让this指向当前实例对象
    // 成功之后的值
    value = null;
    // 失败之后的原因
    reason = null;
    // 存储成功回调函数
    onFulfilledCallback = null;
    // 存储失败回调函数
    onRejectedCallback = null;
    // 更改成功后的状态
    resolve = (value) => {
        if (this.status === promiseStatus.PENDING) {
            this.status = promiseStatus.FULFILLED;
            this.value = value;
            this.onFulfilledCallback && this.onFulfilledCallback(value);
        }
    }
    // 更改失败后的状态
    reject = (reason) => {
        if (this.status === promiseStatus.PENDING) {
            this.status = promiseStatus.REJECTED;
            this.reason = reason;
            this.onRejectedCallback && this.onRejectedCallback(reason);
        }
    }

    then(onFulfilled, onRejected) {
        // 判断状态
        if (this.status === promiseStatus.FULFILLED) {
            // 调用成功回调,并且把值返回
            onFulfilled(this.value);
        } else if (this.status === promiseStatus.REJECTED) {
            onRejected(this.reason);
        } else if (this.status === promiseStatus.PENDING) {
            this.onFulfilledCallbacks.push(onFulfilled);
    this.onRejectedCallbacks.push(onRejected);
        }
    }

}
console 命令行工具 X clear

                    
>
console