写了一个简陋版本的promise实现过程
其中then的实现过程有很大的优化空间 可以使用微任务队列来优化 allSettled的实现没有做
constructor(executor){
this.status = 'pedding'
this.value = undefined;
this.error = undefined;
const resolve = (value) => {
if(this.status == 'pedding'){
this.status = 'resolve';
this.value = value
}
}
const reject = (err) => {
if(this.status == 'pedding'){
this.status = 'reject';
this.error = err
}
}
executor(resolve,reject)
}
then(onResolve,onRejected){
if(this.status == 'resolve'){
onResolve(this.value)
}
if(this.status == 'reject'){
onRejected(this.error)
}
}
catch(onRejected){
return this.then(undefined,onRejected)
}
static resolve(value){
return new myPromise((resolve,reject) => {resolve(value)})
}
static reject(err){
return new myPromise((resolve,reject) => {reject(err)})
}
// 返回所有成功的 有失败的就返回失败的
static all(promises){
return new myPromise((resolve,reject) => {
const resolveArr = [];
promises.forEach(promise => {
promise.then((res) => {
resolveArr.push(res);
if(resolveArr.length === promises.length){
resolve(resolveArr)
}
},err => {
reject(err)
})
});
})
}
static race(promises){
return new myPromise((resolve,reject) => {
promises.forEach(promise => {
promise.then(resolve,reject)
});
})
}
static any(promises){
return new myPromise((resolve,reject) => {
let errorArr = []
promises.forEach(promise => {
promise.then((res) => {
resolve(res)
},error =>{
errorArr.push(error);
if(errorArr.length === promises.length) {
return (new AggregateError(errorArr))
}
})
});
})
}
}