Promise.any() 方法介绍及在 ES11 中的应用

阅读时长 4 分钟读完

Promise.any() 方法是 ES2021 中新增的 Promise 方法之一,它可以从多个 Promise 中返回第一个 resolved 的 Promise,而不是像 Promise.all() 方法一样,等待所有 Promise 都完成再返回结果。本文将详细介绍 Promise.any() 方法的使用方法,并且结合 ES11 中的异步编程案例进行实际应用。

Promise.any() 方法的使用方法

Promise.any() 方法接收一个 Promise 数组作为参数,返回一个新的 Promise,该 Promise 会等待其中任意一个 Promise resolved 后返回其结果。如果所有传入的 Promise 都 rejected,则该方法返回一个 AggregateError 类型的错误对象,其中包含了所有 rejected Promise 的错误信息。

以下是 Promise.any() 方法的基本使用方法:

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

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

在上面的例子中,Promise.any() 方法返回了被 resolved 的第一个 Promise,即 Promise.resolve("Success 1") 的结果。如果所有 Promise 都 rejected,则会返回一个 AggregateError 对象,其中包含了所有 rejected Promise 的错误信息。

Promise.any() 方法的异步编程案例

Promise.any() 方法在异步编程中有很多实际的应用场景。下面,我们通过一个简单的案例来演示 Promise.any() 方法的应用。

假设我们需要从多个 API 端点中获取数据,如果其中任意一个 API 失败,我们就需要返回失败信息。我们可以使用 Promise.any() 方法实现如下:

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

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

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

在上面的代码中,我们使用 node-fetch 库来发送 API 请求。我们将多个 API 端点封装在一个数组中,并通过 map() 方法对其进行遍历,并使用 fetch() 方法发送 API 请求。map() 方法将返回一个 Promise 数组,它包含了各个 API 请求的 Promise 对象。

Promise.any() 方法会返回第一个 resolved 的 Promise,因此,如果其中任意一个 API 请求成功,就会返回其结果。我们使用 then() 方法将返回的 Response 对象转换为 JSON 格式,并输出到控制台上。如果所有 API 请求都失败,则 catch() 方法会捕获这个错误,并输出错误信息。

总结

Promise.any() 方法是 ES2021 中新增的 Promise 方法之一,它可以从多个 Promise 中返回第一个 resolved 的 Promise。在异步编程中有很多实际的应用场景,可以帮助我们更加高效地处理异步代码。我们需要注意的是,Promise.any() 方法会返回任意一个 resolved 的 Promise,因此在使用中需要特别谨慎。

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

纠错
反馈