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);
			});
		})
	}
}
複製代碼
相關文章
相關標籤/搜索