手写promise构造器,更深层次了解promise的原理
手写promise最重要的两个部分就是:
1.promise对象的构造函数
2.promise的then方法
这篇文章介绍的就是第一部分----promise对象的构造函数
第二部分会在下一篇文章呈现.......
no bb,show code
// 状态的字符串用变量来维护
const PENDING = 'pending';
const FULFILLED = 'fulfilled';
const REJECTED = 'rejected';
// 一、先创建一个构造函数
class MyPromise {
// 1.1 建立两个私有属性,记录当前promise的状态和结果 ---使用私有属性的好处就是外界无法改变它,只能内部改变
#state = PENDING;
#result = undefined;
//1.2接收一个函数,然后执行它
constructor(executor) {
// 1.3这个函数接收两个参数,resolve和reject,那为什么不在原型上定义呢?,因为函数内部的this执行会有问题
const resolve = data => {
this.#changeState(FULFILLED, data);
};
const reject = reason => {
this.#changeState(REJECTED, reason);
};
// 1.4 捕获执行函数中的异常,一旦抛出异常则直接改变状态,并把异常err作为promise的结果
try {
executor(resolve, reject);
} catch (err) {
reject(err);
}
}
// 1.4 定义一个私有方法来改变当前promise的状态和结果
#changeState(state, result) {
// changeState函数要做两个事情 1.改变当前promise的状态,2.改变当前promise的结果.
// 当前promise的状态一旦发生改变,后续就不会改变了
if (this.#state !== PENDING) return;
this.#state = state;
this.#result = result;
//输出状态和结果
console.log('[ this.#state ]-32', this.#state);
console.log('[ this.#result ]-34', this.#result);
}
}
const p = new MyPromise((resolve, reject) => {
resolve(456);
throw 123;
});
日拱一卒.....