如何使用 Promise.race?

推荐答案

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

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

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

本题详细解读

什么是 Promise.race

Promise.race 是 JavaScript 中的一个静态方法,它接受一个包含多个 Promise 对象的可迭代对象(如数组)作为参数,并返回一个新的 Promise。这个新的 Promise 会在传入的任意一个 Promise 完成(无论是成功还是失败)时立即完成,并且其结果或错误原因与第一个完成的 Promise 相同。

使用场景

Promise.race 通常用于以下场景:

  1. 超时控制:你可以使用 Promise.race 来设置一个超时机制。例如,如果你有一个网络请求,你可以创建一个超时的 Promise,并将其与网络请求的 Promise 一起传递给 Promise.race。如果网络请求在超时之前完成,结果将是网络请求的结果;如果超时先发生,结果将是超时的错误。

  2. 竞速任务:当你需要从多个异步任务中选择最快完成的任务时,可以使用 Promise.race。例如,你可能有两个不同的 API 提供相同的数据,你可以同时发起两个请求,并使用 Promise.race 来获取最先返回的结果。

代码解析

在推荐答案中,我们创建了两个 Promise 对象 promise1promise2,它们分别在 500 毫秒和 100 毫秒后完成。由于 promise2 完成得更快,Promise.race 返回的 Promise 将采用 promise2 的结果,因此最终输出的是 'two'

注意事项

  • 如果传入的 Promise 中有一个立即完成的(无论是成功还是失败),Promise.race 会立即返回该 Promise 的结果。
  • 如果传入的可迭代对象为空,Promise.race 返回的 Promise 将永远处于 pending 状态。
  • Promise.race 不会取消其他未完成的 Promise,它们仍然会继续执行,但结果将被忽略。
纠错
反馈