1. promise.all
一般来说,Promise.all 用来处理多个并发请求。返回的是所有请求的结果集合。如果其中一个接口失败了,多个请求也就失败了。
function promiseAll(promises) {
return new Promise((resolve, reject) => {
const result = [];
promises.forEach((ele, index) => {
ele.then(res => {
result[index] = res;
if (result.length === promises.length) {
resolve(result)
}
}, err => {
reject(err);
});
});
});
}
const p1 = new Promise((resolve, reject) => {
console.log(1)
setTimeout(() => {
resolve(1)
}, 1000)
})
const p2 = new Promise((resolve, reject) => {
console.log(2)
setTimeout(() => {
resolve(2)
}, 2000)
})
const p3 = new Promise((resolve, reject) => {
console.log(3)
setTimeout(() => {
resolve(3)
}, 3000)
})
promiseAll([p1,p2,p3]).then(res => {
console.log(res)
})
// 结果
// 1 2 3
// 【1,2,3】
2. promise.race
function promiseRace(promises) {
return new Promise((resolve, reject) => {
promises.forEach((ele) => {
ele.then(resolve, reject);
});
});
}
const p1 = new Promise((resolve, reject) => {
console.log(1)
setTimeout(() => {
resolve(1)
}, 3000)
})
const p2 = new Promise((resolve, reject) => {
console.log(2)
setTimeout(() => {
reject(new Error());
}, 2000)
})
promiseRace([p1,p2]).then(res => {
console.log('res', res)
}, err => console.log('err', err))