ES6+ 面试题
目录

Promise.any 的作用是什么?

· 约 4 分钟读完 · 第 113 / 142 章

推荐答案

Promise.any 是 ECMAScript 2021 引入的一个方法,它接收一个包含多个 Promise 对象的可迭代对象(如数组),并返回一个新的 Promise。这个新的 Promise 会在传入的任何一个 Promise 成功(fulfilled)时立即成功,并返回该成功的值。如果所有的 Promise 都失败(rejected),则返回一个 AggregateError,其中包含所有 Promise 的失败原因。

本题详细解读

1. 基本用法

在这个例子中,Promise.any 接收了一个包含三个 Promise 的数组。尽管 promise1 和 promise3 都失败了,但 promise2 成功了,因此 Promise.any 返回的 Promise 会成功,并输出 "Success 2"。

2. 所有 Promise 都失败的情况

在这个例子中,所有的 Promise 都失败了,因此 Promise.any 返回的 Promise 会失败,并抛出一个 AggregateError,其中 errors 属性包含了所有 Promise 的失败原因。

3. 与 Promise.race 的区别

Promise.any 和 Promise.race 的区别在于:

  • Promise.race 会在第一个 Promise 完成(无论是成功还是失败)时立即返回。
  • Promise.any 则会在第一个 Promise 成功时返回,只有在所有 Promise 都失败时才会返回失败。

在这个例子中,Promise.race 会因为 promise1 的失败而立即返回失败,而 Promise.any 则会因为 promise2 的成功而返回成功。

4. 使用场景

Promise.any 适用于以下场景:

  • 当你有多个异步操作,并且只要有一个成功就可以继续执行时。
  • 当你希望在所有操作都失败时,能够获取到所有失败的原因。

例如,在多个数据源中获取数据时,只要有一个数据源返回了有效数据,就可以继续处理,而不需要等待所有数据源都返回结果。