class MyPromise {
constructor(fn){
this.res = null;
this.err = null;
this.status = 'PENDING';
this.onResolveCallbacks = [];//存放成功的回调
this.onRejectCallbacks = [];//存放失败的回调
try {
fn((res) => {
this.status = 'resolved';
this.res = res;
this.onResolveCallbacks.forEach(fn => fn())
}, (err) => {
this.status = 'rejected';
this.err = err
this.onRejectCallbacks.forEach(fn => fn())
})
} catch (error) {
console.log(error)
}
}
//成功的回调函数
then(onFulfilled, onRejected) {
let self = this;
if (this.status === 'resolved') {//成功
onFulfilled(self.res);
}
if (this.status === 'rejected') {//失败
onRejected(self.err);
}
//如果promise的状态是 pending,需要将 onFulfilled 和 onRejected 函数存放起来,等待状态确定后,再依次将对应的函数执行
if (this.status === 'PENDING'){
this.onResolveCallbacks.push(()=>{
onFulfilled(self.res)
})
this.onRejectCallbacks.push(() => {
onFulfilled(self.err)
})
}
}
}
let p = new MyPromise((resolve,reject)=>{
resolve('1')
})
p.then((res)=>{
//成功的回调
console.log(res,'成功')
},(err)=>{
console.log(err,'失败')
})