1. const p1 = new Promise((resolve) => {
    2. setTimeout(() => {
    3. resolve(1);
    4. }, 1000);
    5. });
    6. const p2 = new Promise((resolve,reject) => {
    7. setTimeout(() => {
    8. // resolve(2);
    9. reject(2);
    10. }, 2000);
    11. });
    12. const p3 = new Promise((resolve) => {
    13. setTimeout(() => {
    14. resolve(3);
    15. }, 3000);
    16. });
    17. const promiseArr = [p1, p2, p3];

    多个请求继发执行

    https://libin1991.github.io/2019/04/17/%E4%B8%BA%E5%95%A5await%E4%B8%8D%E8%83%BD%E7%94%A8%E5%9C%A8forEach%E4%B8%AD/

    1. (async function test() {
    2. for (const p of promiseArr) {
    3. const res = await p;
    4. console.log(res);
    5. }
    6. })();
    7. // 顺序打印出
    8. 1
    9. 2
    10. 3
    11. // 如果有个promise错误 ,会中断
    12. // 需要catch
    13. (async function test() {
    14. const res = [];
    15. for (const p of promiseArr) {
    16. const a = await p.catch((err) => err);
    17. console.log(a)
    18. res.push(a); //可以用数组存起来结果
    19. }
    20. console.log(res); // [1,2,3]
    21. })();

    多个请求并发执行

    1. Promise.all(promiseArr)
    2. .then((res) => {
    3. console.log("res", res); // 3s后一下打印出 [1, 2, 3]
    4. })
    5. .catch((err) => {
    6. console.log("err", err);
    7. });
    8. // 如果有个promise错误也会中断
    9. // 返回一个处理之后的promise数组,让所有的promises都走resolve
    10. const transPromises = (promises) => {
    11. return promises.map((promise) => {
    12. return promise.then((res) => res).catch((err) => err);
    13. });
    14. };
    15. const newArr = transPromises(promiseArr);
    16. Promise.all(newArr)
    17. .then((res) => {
    18. console.log("res", res);
    19. })
    20. .catch((err) => {
    21. console.log("err", err);
    22. });
    23. // res [ 1, 'e2', 3 ]

    Promise.allSettled

    1. Promise.allSettled(promiseArr)
    2. .then((res) => {
    3. console.log("res", res);
    4. })
    5. .catch((err) => {
    6. console.log("err", err);
    7. });
    8. // 打印:
    9. res [
    10. { status: 'fulfilled', value: 1 },
    11. { status: 'rejected', reason: 'e2' },
    12. { status: 'fulfilled', value: 3 }
    13. ]