如何使用 Promise.all?

推荐答案

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

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

本题详细解读

1. 什么是 Promise.all

Promise.all 是 JavaScript 中的一个静态方法,它接受一个可迭代对象(通常是数组)作为参数,数组中的每个元素都是一个 Promise 对象。Promise.all 会等待所有的 Promise 对象都成功完成(即变为 fulfilled 状态),然后返回一个新的 Promise 对象,该 Promise 对象的结果是一个数组,数组中的每个元素对应传入的 Promise 对象的结果。

2. 如何使用 Promise.all

  • 传入一个 Promise 数组Promise.all 接受一个 Promise 数组作为参数。数组中的每个元素可以是一个 Promise 对象,也可以是一个非 Promise 值(如数字、字符串等),这些非 Promise 值会被自动转换为已完成的 Promise。

  • 等待所有 Promise 完成Promise.all 会等待所有的 Promise 都完成(即变为 fulfilled 状态)。如果其中任何一个 Promise 被拒绝(即变为 rejected 状态),Promise.all 会立即返回一个被拒绝的 Promise,并且不会等待其他 Promise 完成。

  • 返回结果数组:如果所有的 Promise 都成功完成,Promise.all 返回的 Promise 对象的结果是一个数组,数组中的每个元素对应传入的 Promise 对象的结果。

3. 示例代码解析

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

---------------------- --------- ------------------------ -- -
  -------------------- -- --- --- --- ------
---
  • promise1:这是一个已经完成的 Promise,结果为 3
  • promise2:这是一个非 Promise 值 42,会被自动转换为一个已完成的 Promise。
  • promise3:这是一个延迟 100 毫秒后完成的 Promise,结果为 'foo'

Promise.all 会等待所有的 Promise 完成,然后返回一个包含所有结果的数组 [3, 42, "foo"]

4. 错误处理

如果 Promise.all 中的任何一个 Promise 被拒绝,Promise.all 会立即返回一个被拒绝的 Promise,并且不会等待其他 Promise 完成。你可以使用 .catch 方法来处理错误:

5. 适用场景

Promise.all 适用于需要并行执行多个异步操作,并且需要等待所有操作都完成后再进行下一步处理的场景。例如,同时发起多个网络请求,并在所有请求都完成后处理返回的数据。

纠错
反馈