promise的实现原理

一、Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最先提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。编程

function Promise(fn) {
	const self = this;
	self.status = 'pending';
	self.data = undefined;
	self.resolveList = [];
	function resolve(value) {
		self.status = 'resolve';
		self.data = value;
		self.resolveList.forEach(item => item(self.data));
	}
	function reject(err) {
		self.status = 'reject';
		self.data = err;
	}
	fn(resolve, reject);
}
// then 方法的返回值是一个 Promise
Promise.prototype.then = function(resolveFn, rejectFn) {
	const self = this;
	resolveFn = typeof resolveFn === 'function' ? resolveFn : (a) => a;
	if (self.status === 'resolve') {
		return new Promise((resolve) => {
			const x = resolveFn(self.data);
			resolve(x);
		})
	}
	if (self.status === 'pending') {
		return new Promise((resolve) => {
			self.resolveList.push(function() {
				const x = resolveFn(self.data);
				resolve(x);
			});
		})
	}
}
复制代码
相关文章
相关标签/搜索