实现一个race方法
class MyPromise{
static race(arr){
return new Promise((resolve,reject)=>{
arr.forEach(item=>{
// item.then(res=>{
// resolve(res);
// },err=>{
// reject(err);
// })
item.then(resolve,reject); // 简写 ;
})
})
}
}
let p1 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(1111);
}, 2000);
})
let p2 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(222);
}, 3000);
})
let p3 = new Promise((resolve,reject)=>{
setTimeout(() => {
// resolve(333);
reject("错了");
}, 1000);
})
MyPromise.race([p1,p2,p3]).then(res=>{
console.log("成功",res)
},err=>{
console.log("失败",err);
})
all方法的实现
let p1 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(111);
}, 1000);
})
let p2 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(222);
}, 3000);
})
let p3 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(333);
// reject("error");
}, 2000);
})
class MyPromise{
static all(arr){
return new Promise((resolve,reject)=>{
var resarr = [];
var count = 0;
arr.forEach(item=>{
item.then(res=>{
count++;
resarr.push(res);
// console.log(count);
// resolve(resarr);
if(count===arr.length){
resolve(resarr);
}
},err=>{
reject(err);
})
})
})
}
}
MyPromise.all([p1,p2,p3]).then(res=>{
console.log(res)
},err=>{
console.log(err);
})
promise里的allsettled实现
let p1 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(111);
}, 1000);
})
let p2 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(222);
}, 3000);
})
let p3 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(333);
}, 2000);
})
class MyPromise{
static allSettled(arr){
return new Promise(resolve=>{
var resarr = [];
var count = 0;
arr.forEach(item=>{
item.then(res=>{
count++;
let obj = {
status:"fufilled",
value:res
}
resarr.push(obj);
if(count===arr.length){
resolve(resarr);
}
},err=>{
count++;
let obj = {
status:"rejected",
reason:err
}
resarr.push(obj);
if(count===arr.length){
resolve(resarr);
}
})
})
})
}
}
MyPromise.allSettled([p1,p2,p3]).then(res=>{
console.log(res);
})