Promise.allSettled 函数的用法详解

举报
林欣 发表于 2024/11/15 11:39:26 2024/11/15
【摘要】 Promise.allSettled 函数的用法详解及使用场景说明 用法详解Promise.allSettled 是 JavaScript ES2020 (ES11) 中引入的一个静态方法,用于处理多个 Promise,并在所有 Promise 都已经成功(fulfilled)或失败(rejected)后,返回一个包含每个 Promise 结果的数组。语法:Promise.allSettl...

Promise.allSettled 函数的用法详解及使用场景说明

用法详解

Promise.allSettled 是 JavaScript ES2020 (ES11) 中引入的一个静态方法,用于处理多个 Promise,并在所有 Promise 都已经成功(fulfilled)或失败(rejected)后,返回一个包含每个 Promise 结果的数组。

语法

Promise.allSettled(iterable)
  • iterable:一个可迭代对象(如数组),其中包含多个 Promise。

返回值

  • 返回一个新的 Promise,该 Promise 在所有给定的 Promise 都已经 fulfilled 或 rejected 后完成。
  • 返回的 Promise 解析为一个数组,数组中的每个元素都是一个对象,表示对应 Promise 的结果。
    • 如果 Promise 成功(fulfilled),则对象包含 status: 'fulfilled'value 属性,其中 value 是 Promise 的解决值。
    • 如果 Promise 失败(rejected),则对象包含 status: 'rejected'reason 属性,其中 reason 是 Promise 的拒绝原因。

示例代码

const promise1 = Promise.resolve(42);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'error'));
const promise3 = Promise.resolve('Hello World');

Promise.allSettled([promise1, promise2, promise3]).then((results) => {
  results.forEach((result) => {
    if (result.status === 'fulfilled') {
      console.log(`Fulfilled with value: ${result.value}`);
    } else {
      console.log(`Rejected with reason: ${result.reason}`);
    }
  });
});

在这个例子中,promise1promise3 成功解决,而 promise2 被拒绝。Promise.allSettled() 返回的 Promise 将解析为一个包含这三个 Promise 结果的数组。输出结果将显示 promise1promise3 的成功值,以及 promise2 的拒绝原因。

使用场景说明

  1. 并行任务处理

    当需要并行执行多个异步任务,并且需要在所有任务都完成后(无论成功还是失败)进行汇总或处理时,可以使用 Promise.allSettled()。例如,同时从多个 API 获取数据,并在所有数据都获取后进行汇总分析。

  2. 容错处理

    在执行多个可能失败的异步操作时,如果希望即使某些操作失败也能继续处理其他操作的结果,可以使用 Promise.allSettled()。例如,从多个数据源获取数据,即使某些数据源返回错误,也可以继续处理其他数据源返回的数据。

  3. 日志记录

    当需要记录多个异步操作的结果,无论它们是否成功时,可以使用 Promise.allSettled()。例如,在执行一系列异步操作时,记录每个操作的成功或失败状态以及相关的结果或错误信息。

  4. 依赖多个异步条件的决策

    在某些情况下,可能需要根据多个异步操作的结果来做出决策,而这些操作中的某些可能会失败。使用 Promise.allSettled() 可以确保在所有操作都完成后才进行决策,同时考虑到每个操作的成功或失败情况。

总的来说,Promise.allSettled() 是一个有用的工具,用于处理多个 Promise 并在所有 Promise 都完成后(无论成功还是失败)获取它们的结果。它特别适用于需要并行任务处理、容错处理、日志记录以及依赖多个异步条件的决策等场景。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。