手写 Promise - 状态控制

2020-08-15  本文已影响0人  bestCindy
 const MyPromise = (() => {
    const PENDING = "pending",
        RESOLVED = "resolved",
        REJECTED = "rejected",
        //不能让外部访问
        PromiseValue = Symbol("PromiseValue"),//状态数据
        PromiseStatus = Symbol("PromiseStatus"),//当前状态
        changeStatus = Symbol("changeStatus");

    return class MyPromise {
        [changeStatus](newStatus, newValue) {
            if (this[PromiseStatus] != PENDING) {
                //状态无法变更
                return;
            };
            this[PromiseStatus] = newStatus;
            this[PromiseValue] = newValue;
        };

        // executor 未决阶段(pending 状态)下的处理函数
        constructor(executor) {
            this[PromiseStatus] = PENDING;
            this[PromiseValue] = undefined;

            const resolve = data => {
                this[changeStatus](RESOLVED, data);
            };

            const reject = reason => {
                this[changeStatus](REJECTED, reason);
            };

            try {
                executor(resolve, reject);
            } catch(err) {
                reject(err);
            };
        };
    };
})();
上一篇 下一篇

猜你喜欢

热点阅读