推荐答案
-- -------------------- ---- ------- ----- -------- - --- ----------------- ------- -- - ------------------- ---- ------- --- ----- -------- - --- ----------------- ------- -- - ------------------- ---- ------- --- ----------------------- ----------------------- -- - ------------------- -- --- ----- ---
本题详细解读
什么是 Promise.race
?
Promise.race
是 JavaScript 中的一个静态方法,它接受一个包含多个 Promise 对象的可迭代对象(如数组)作为参数,并返回一个新的 Promise。这个新的 Promise 会在传入的任意一个 Promise 完成(无论是成功还是失败)时立即完成,并且其结果或错误原因与第一个完成的 Promise 相同。
使用场景
Promise.race
通常用于以下场景:
超时控制:你可以使用
Promise.race
来设置一个超时机制。例如,如果你有一个网络请求,你可以创建一个超时的 Promise,并将其与网络请求的 Promise 一起传递给Promise.race
。如果网络请求在超时之前完成,结果将是网络请求的结果;如果超时先发生,结果将是超时的错误。竞速任务:当你需要从多个异步任务中选择最快完成的任务时,可以使用
Promise.race
。例如,你可能有两个不同的 API 提供相同的数据,你可以同时发起两个请求,并使用Promise.race
来获取最先返回的结果。
代码解析
在推荐答案中,我们创建了两个 Promise 对象 promise1
和 promise2
,它们分别在 500 毫秒和 100 毫秒后完成。由于 promise2
完成得更快,Promise.race
返回的 Promise 将采用 promise2
的结果,因此最终输出的是 'two'
。
注意事项
- 如果传入的 Promise 中有一个立即完成的(无论是成功还是失败),
Promise.race
会立即返回该 Promise 的结果。 - 如果传入的可迭代对象为空,
Promise.race
返回的 Promise 将永远处于 pending 状态。 Promise.race
不会取消其他未完成的 Promise,它们仍然会继续执行,但结果将被忽略。