const p1 = new Promise((resolve) => {
setTimeout(() => {
resolve(1);
}, 1000);
});
const p2 = new Promise((resolve,reject) => {
setTimeout(() => {
// resolve(2);
reject(2);
}, 2000);
});
const p3 = new Promise((resolve) => {
setTimeout(() => {
resolve(3);
}, 3000);
});
const promiseArr = [p1, p2, p3];
多个请求继发执行
(async function test() {
for (const p of promiseArr) {
const res = await p;
console.log(res);
}
})();
// 顺序打印出
1
2
3
// 如果有个promise错误 ,会中断
// 需要catch
(async function test() {
const res = [];
for (const p of promiseArr) {
const a = await p.catch((err) => err);
console.log(a)
res.push(a); //可以用数组存起来结果
}
console.log(res); // [1,2,3]
})();
多个请求并发执行
Promise.all(promiseArr)
.then((res) => {
console.log("res", res); // 3s后一下打印出 [1, 2, 3]
})
.catch((err) => {
console.log("err", err);
});
// 如果有个promise错误也会中断
// 返回一个处理之后的promise数组,让所有的promises都走resolve
const transPromises = (promises) => {
return promises.map((promise) => {
return promise.then((res) => res).catch((err) => err);
});
};
const newArr = transPromises(promiseArr);
Promise.all(newArr)
.then((res) => {
console.log("res", res);
})
.catch((err) => {
console.log("err", err);
});
// res [ 1, 'e2', 3 ]
Promise.allSettled
Promise.allSettled(promiseArr)
.then((res) => {
console.log("res", res);
})
.catch((err) => {
console.log("err", err);
});
// 打印:
res [
{ status: 'fulfilled', value: 1 },
{ status: 'rejected', reason: 'e2' },
{ status: 'fulfilled', value: 3 }
]