JavaScript 中 Promise.all 和 Promise.race 方法的用法?

推荐答案

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

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

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

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

本题详细解读

Promise.all

Promise.all 方法接收一个包含多个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 对象在所有传入的 Promise 对象都成功解决(resolved)时才会被解决。如果其中任何一个 Promise 被拒绝(rejected),则整个 Promise.all 返回的 Promise 对象会立即被拒绝。

  • 成功情况:当所有 Promise 都成功解决时,Promise.all 返回的 Promise 对象会以一个包含所有 Promise 解决值的数组作为解决值。
  • 失败情况:如果任何一个 Promise 被拒绝,Promise.all 返回的 Promise 对象会立即被拒绝,并且拒绝原因与第一个被拒绝的 Promise 相同。

Promise.race

Promise.race 方法同样接收一个包含多个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 对象会在传入的 Promise 对象中有一个率先解决(无论是成功还是失败)时被解决。

  • 解决情况Promise.race 返回的 Promise 对象会以第一个解决(无论是成功还是失败)的 Promise 的解决值或拒绝原因作为自己的解决值或拒绝原因。

使用场景

  • Promise.all:适用于需要等待多个异步操作全部完成后再进行下一步操作的场景。例如,同时发起多个 API 请求,并在所有请求都返回结果后再进行处理。
  • Promise.race:适用于需要从多个异步操作中获取最快响应的场景。例如,设置一个超时机制,如果某个操作在指定时间内没有完成,则使用另一个操作的结果。

注意事项

  • Promise.allPromise.race 都接受一个可迭代对象(如数组)作为参数,但通常使用数组。
  • 如果传入的数组为空,Promise.all 会立即解决为一个空数组,而 Promise.race 会永远挂起,不会解决或拒绝。
纠错
反馈