Promise all() 和 race() 方法详解

阅读时长 3 分钟读完

Promise 是一个新的异步编程解决方案,它避免了回调地狱,并且使得异步操作更加简单和直观。在 Promise 中,我们经常需要用到 Promise.all() 和 Promise.race() 这两个方法来操作异步任务。

Promise.all()

Promise.all() 方法接受一个 Promise 数组作为参数,返回一个新的 Promise。当传入的所有 Promise 都成功返回时,新的 Promise 才会成功,返回值是一个由所有 Promise 结果组成的数组。如果其中一个 Promise 失败,则新 Promise 失败,返回值是该 Promise 的错误信息。

Promise.all() 的一个比较典型的应用场景是在并行执行多个 Promise 实例时使用。比如我们需要向多个站点发送请求,然后在所有请求返回后进行下一步操作。下面是代码示例:

上面的代码中,我们使用 fetch 函数发送了三个 Ajax 请求,然后通过 Promise.all() 方法来等待三个请求全部结束,然后将全部结果合并为一个数组。这个数组中包含了所有请求返回的结果,按照请求顺序排列。

Promise.race()

Promise.race() 方法同样接受一个 Promise 数组作为参数,返回一个新的 Promise。和 Promise.all() 不同的是,Promise.race() 的返回结果取决于数组中第一个返回结果的 Promise 实例。无论这个 Promise 成功还是失败,新的 Promise 都结束。如果第一个返回结果的 Promise 实例失败,则新的 Promise 失败,返回该 Promise 的错误信息。

Promise.race() 的一个常见用途是在超时等待场景中。比如我们需要发送一个请求,等待 5 秒后如果没有返回结果,则认为请求失败。下面是代码示例:

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

上面的代码中,我们通过 Promise.race() 方法来等待 5 秒钟或者发送请求成功后的第一个返回结果。如果在 5 秒之内请求成功,我们就打印出响应内容。如果 5 秒之内没有收到响应,我们就认为该请求已经失败。

总结

Promise.all() 和 Promise.race() 是 Promise 的两个重要方法,它们分别用于等待多个 Promise 实例同时返回和等待多个 Promise 实例中的第一个返回。这两个方法在实际应用中十分常用,特别是在进行 Ajax 请求时。学习 Promise.all() 和 Promise.race() 方法,对于我们更好的理解 Promise 所涉及的异步操作,提高编程效率具有非常重要的指导意义。

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

纠错
反馈