一、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);
});
})
}
}
复制代码