Promise
var p1 = new Promise((res, rej) => {
setTimeout(() => {
res(1111)
}, 1000)
})
var p2 = new Promise((res, rej) => {
setTimeout(() => {
rej(2222)
}, 2000)
})
Promise.promideAll
Promise.all([p1, p2]).then(res => {
console.log(res);
}, err=>{
console.log(err, 'err--->');
})
// 手写简易promiseAll
myPromiseAll([p1, p2]).then(res => {
console.log(res, 'myPromiseAll');
}, err=>{
console.log(err, 'err===>');
})
function myPromiseAll(arr) {
return new Promise(resolve => {
let n = arr.length
let resArr = []
let num = 0
arr.forEach(item => {
item.then((res, rej) => {
resArr.push(res)
num++
if (num === n) {
resolve(resArr)
}
}, err=>{
console.log(err);
})
});
})
}
Promise.allSettled
Promise.allSettled([p1, p2]).then(res=>{
console.log(res, 'promiseAllSettled');
})
// 手写简易promiseAllSettled
myPromiseSettled([p1,p2]).then(res=>{
console.log(res, 'myPromiseSettled');
})
function myPromiseSettled(arr) {
return new Promise(resolve => {
let n = arr.length
let num = 0
let resArr = []
arr.forEach((item, key) => {
item.then(res => {
num++
resArr[key] = {
status: 'fulfilled',
value: res
}
if (num === n) {
resolve(resArr)
}
}, err => {
num++
resArr[key] = {
status: 'rejectd',
reason: err
}
if (num === n) {
resolve(resArr)
}
})
})
})
}