以下是实现的Promise的简单版本
class MyPromise {
constructor(executor) {
this.state = 'pending';
this.value = '';
this.resolveCallBacks = [];
this.rejectCallbacks = [];
const resolve = (value) => {
if (this.state === 'pending') {
this.state = 'fulfilled';
this.value = value;
this.resolveCallBacks.forEach((resolveCb) => {
resolveCb();
});
}
};
const reject = (value) => {
if (this.state === 'pending') {
this.state = 'rejected';
this.value = value;
this.rejectCallbacks.forEach((rejectCb) => {
rejectCb();
});
}
};
executor(resolve, reject);
}
then(fulfillCb, rejectedCb) {
if (typeof fulfillCb !== 'function') {
fulfillCb = () => this.value;
}
if (typeof rejectedCb !== 'function') {
rejectedCb = () => this.value;
}
return new MyPromise((resolve, reject) => {
if (this.state === 'pending') {
this.resolveCallBacks.push(() => {
const result = fulfillCb(this.value);
resolve(result);
});
this.rejectCallbacks.push(() => {
console.log('rejectedCb', rejectedCb);
const result = rejectedCb(this.value);
reject(result);
});
}
if (this.state === 'fulfilled') {
setTimeout(() => {
const result = fulfillCb(this.value);
resolve(result);
}, 0);
}
if (this.state === 'rejected') {
setTimeout(() => {
const result = rejectedCb(this.value);
console.log('result', result);
}, 0);
}
});
}
}
module.exports = MyPromise;