感悟:有的知识你从”底层“来看会觉得很清晰!
注意:这个源码并不是实际的Promise实现。我主要是想主要是想通模仿实现Promise来学习!
class Promise {
constructor(executor) {
this.resolvedCallbacks = [];
this.rejectedCallbacks = [];
this.state = "PENDING";
this.value = "";
//这里解释了为什么必是传入resolve,reject;
executor(this.resolve.bind(this), this.reject.bind(this));
}
resolve(value) {
if (this.state === 'PENDING') {
// 解释了为什么执行了resolve方法会将promise
this.state = "RESOLVED";
// 这里解释了为什么resolve传入的值会改变promise的value属性
this.value = value;
this.resolvedCallbacks.map(callback => callback(value));
}
}
reject(value) {
if (this.state === 'PENDING') {
// 解释了为什么执行了reject方法会将Promise的实例状态变为REJECTED
this.state = "REJECTED";
// 这里解释了为什么reject传入的值会改变promise的value属性
this.value = value;
this.rejectedCallbacks.map(callback => callback(value));
}
}
then(onFulfilled, onRejected) {
if (this.state === "PENDING") {
this.resolvedCallbacks.push(onFulfilled);
this.rejectedCallbacks.push(onRejected);
}
if (this.state === "RESOLVED") {
onFulfilled(this.value);
}
if (this.state === 'REJECTED') {
onRejected(this.value);
}
}
}