一、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);
});
})
}
}
複製代碼