js Promise.all 和 Promise.allSettled 的区别和用法

Promise.all 用法

  • 定义Promise.all() 方法接受一个包含多个 Promise 实例的可迭代对象(如数组),并返回一个新的 Promise 实例。该 Promise 实例会在所有输入的 Promise 都成功解决时被解决,或者在任意一个 Promise 被拒绝时被拒绝。

  • 工作机制

    • 全部成功或立即失败:只有当所有提供的 Promise 都成功解决时,Promise.all() 返回的 Promise 才会变为 resolved 状态,并返回一个包含所有 Promise 结果的数组。如果其中一个 Promise 被拒绝,Promise.all() 返回的 Promise 将立即变为 rejected 状态,并返回第一个被拒绝的 Promise 的错误信息。

    • 结果顺序:返回的结果数组中的元素顺序与输入的 Promise 数组中的顺序一致,与各 Promise 完成的先后顺序无关。

  • 示例

    const promise1 = Promise.resolve(1);
    const promise2 = Promise.resolve(2);
    const promise3 = Promise.resolve(3);
    Promise.all([promise1, promise2, promise3]).then((results) => {
      console.log(results); // 输出 [1, 2, 3]
    });

Promise.allSettled 用法

  • 定义Promise.allSettled() 方法接受一个包含多个 Promise 实例的可迭代对象(如数组),并返回一个新的 Promise 实例。该 Promise 实例会在所有输入的 Promise 都确定其结果(无论是成功还是失败)时被解决。

  • 工作机制

    • 全部完成:无论输入的 Promise 是成功还是失败,Promise.allSettled() 返回的 Promise 都会等待所有 Promise 完成后才变为 resolved 状态。

    • 结果格式:返回的 Promise 的值是一个数组,每个元素对应于原始 Promises 数组中的一个位置,表示相应 Promise 的结果或原因。如果 Promise 成功,则为 {status: 'fulfilled', value: result};如果 Promise 失败,则为 {status: 'rejected', reason: error}

  • 示例

    const promise1 = Promise.resolve(1);
    const promise2 = Promise.reject('错误');
    const promise3 = new Promise((resolve) => setTimeout(resolve, 100, 3));
    Promise.allSettled([promise1, promise2, promise3]).then((results) => {
      console.log(results);
      /*
      [
        {status: "fulfilled", value: 1},
        {status: "rejected", reason: "错误"},
        {status: "fulfilled", value: 3}
      ]
      */
    });

Promise.all 和 Promise.allSettled 的区别

  • 错误处理

    • Promise.all() 会在任意一个 Promise 被拒绝时立即终止执行并返回错误,不会等待其他 Promise 完成。

    • Promise.allSettled() 则会等待所有 Promise 完成,无论它们是成功还是失败,然后返回每个 Promise 的结果或原因。

  • 结果返回

    • Promise.all() 返回的结果是一个数组,包含所有 Promise 的成功结果,顺序与输入的 Promise 数组一致。

    • Promise.allSettled() 返回的结果是一个数组,每个元素是一个对象,包含对应 Promise 的状态和值或原因。

  • 适用场景

    • Promise.all() 适用于所有异步任务都需要成功完成的情况,例如多个数据请求都必须成功才能继续后续操作。

    • Promise.allSettled() 适用于需要同时发起多个异步操作,并希望知道每个操作的具体结果的情况,即使部分操作失败也不会影响整体流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值