// 先定义三个常量表示状态
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