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);
};
};
};
})();
网友评论