promise
用 ES5 编写的简单 Promise 实现,该实现涵盖了基本的 Promise 功能,包括异步处理、then
方法和错误处理:
function FakePromise(exec) {
let self = this;
// 初始状态为pending
self.status = 'pending';
// 成功的结果
self.value = null;
self.onFulfilledCallback=[]
// 失败的原因
self.reason = null;
self.onRejectCallback=[]
// 成功的回调
function resolve(value) {
if (self.status === 'pending') {
self.value = value;
self.status = "fulfilled";
self.onFulfilledCallback.forEach(item=>item(value));
}
// fulfilled
}
// 失败的回调
function reject(reason) {
if (self.status === 'pending') {
self.reason = reason;
self.status = "rejected";
self.onRejectCallback.forEach(item=>item(reason));
}
// rejected
}
try {
exec(resolve, reject)
} catch (error) {
}
}
FakePromise.prototype.then = function (onFulfilled, onRejected) {
// 状态发生改变
onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : function (data) { resolve(data) };
onRejected = typeof onRejected === 'function' ? onRejected : function (err) { throw err };
if(this.status==='pending'){
this.onFulfilledCallback.push(onFulfilled)
this.onRejectCallback.push(onRejected)
}
}
const p = new FakePromise((resolve, reject) => {
console.log('new FakePromise');
setTimeout(()=>{
resolve('结果')
},1000)
})
p.then((data) => console.log(data));