Promise.all 和 Promise.race 有哪些区别和用法

阅读时长 5 分钟读完

什么是 Promise?

Promise 是 JavaScript 中一种特殊的对象,它表示一个异步操作的最终结果。Promise 有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。

Promise.all

Promise.all是一个比较常用的用于并行处理多个异步操作的方法,它接收一个 Promise 数组作为参数,只有当所有 Promise 都执行成功后才会返回成功的结果。

使用方式

在上述代码中,我们可以看到,当所有传入的 Promise 对象都成功 resolve 后,会以一个数组作为参数来调用 Promise.allthen 方法。

如果传入的 Promise 数组中有一个 fail,Promise.all 则会直接返回 reject 并传递该 promise fail 的原因。

示例代码

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

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

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

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

上述代码中,我们创建了三个 Promise 对象,每个对象的 resolve 时间间隔分别为 1 秒、2 秒、3 秒。强制使用 Promise.all 并行执行三个 Promise 对象并打印出三个结果 result1result2result3

Promise.race

Promise.race 方法与 Promise.all 类似,只不过在任意 Promise 对象 resolve 或 reject 后马上返回结果。

使用方式

在上述代码中,当 Promise 数组中的任意一个 Promise 对象 resolve 或 reject 后,就会以相应的结果调用 Promise.racethencatch 方法。

示例代码

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

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

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

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

在上述代码中,我们创建了三个 Promise 对象,每个对象的 resolve 时间间隔分别为 1 秒、500 毫秒、3 秒。我们强制使用 Promise.race 只返回最快 resolve 的 Promise 对象,并打印出结果 result2

总结

Promise.all 方法用于并行处理多个异步操作并等待所有 Promise 对象 resolve,之后再返回所有结果。

Promise.race 方法用于并行处理多个异步操作,当任意一个 Promise 对象 resolve 或 reject 后,就会返回该 Promise 对象相应的结果。

我们在原生 JavaScript 中使用这些方法来优化我们的异步调用,提高应用程序的响应速度和性能。

希望本文能够对你理解 Promise.allPromise.race 的区别和用法有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e56b45f6b2d6eab30da07f

纠错
反馈