Promise.allSettled 的作用是什么?

推荐答案

Promise.allSettled 是 ECMAScript 2020 引入的一个静态方法,用于处理多个 Promise 对象。它接收一个 Promise 对象数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 对象在所有输入的 Promise 对象都已完成(无论是成功还是失败)时才会被解决。返回的 Promise 对象的结果是一个数组,数组中的每个元素都是一个对象,表示对应输入 Promise 的最终状态(fulfilledrejected)及其值或原因。

本题详细解读

1. 基本用法

-- -------------------- ---- -------
----- -------- - -
  -------------------
  --------------------- -----------
  ------------------
--

----------------------------
  ------------- -- -
    ---------------------- -- -
      -- -------------- --- ------------ -
        ------------------------- --------------
      - ---- -
        ------------------------ ---------------
      -
    ---
  ---

2. 返回值

Promise.allSettled 返回的 Promise 对象的结果是一个数组,数组中的每个元素都是一个对象,包含以下属性:

  • status: 表示 Promise 的最终状态,可以是 'fulfilled''rejected'
  • value: 如果状态为 'fulfilled',则此属性包含 Promise 的解决值。
  • reason: 如果状态为 'rejected',则此属性包含 Promise 被拒绝的原因。

3. 与 Promise.all 的区别

  • Promise.all: 只有当所有输入的 Promise 都成功解决时,返回的 Promise 才会被解决。如果任何一个 Promise 被拒绝,返回的 Promise 会立即被拒绝,并且不会等待其他 Promise 的结果。
  • Promise.allSettled: 无论输入的 Promise 是成功还是失败,返回的 Promise 都会在所有输入的 Promise 完成后被解决。它不会因为某个 Promise 被拒绝而提前结束。

4. 适用场景

Promise.allSettled 适用于需要处理多个异步操作,并且希望在所有操作都完成后(无论成功或失败)再进行下一步处理的场景。例如,批量请求多个 API,并且需要知道每个请求的最终结果时,可以使用 Promise.allSettled

5. 示例

-- -------------------- ---- -------
----- ----------- - -
  --------------------
  --------------------
  -------------------
--

-------------------------------
  ------------- -- -
    ------------------------ ------ -- -
      -- -------------- --- ------------ -
        -------------------- ------- - -- ------------ --------------
      - ---- -
        -------------------- ------- - -- --------- ---------------
      -
    ---
  ---

在这个示例中,无论每个 API 请求是否成功,Promise.allSettled 都会在所有请求完成后返回结果,并允许你根据每个请求的状态进行相应的处理。

纠错
反馈