手写Promise的构造器(一)

手写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;
});

日拱一卒.....

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值