Promise.any()

Promise.any() 接收一个Promise.all()是相反的。

注意! Promise.any() 方法依然是实验性的,尚未被所有的浏览器完全支持。它当前处于 TC39 第三阶段草案(Stage 3)

语法

Promise.any(iterable);

参数

iterable
一个  可迭代 的对象, 例如 Array

返回值

  • 如果传入的参数是一个空的可迭代对象,则返回一个 已完成(already resolved) 状态的 Promise
  • 如果传入的参数不包含任何 promise,则返回一个 异步完成 (asynchronously resolved)的 Promise
  • 其他情况下都会返回一个处理中(pending) 的 Promise。 只要任何一个 promise 变成完成(resolve)状态,或者所有的 promises 都被拒绝,返回的 promise 就会 异步地 变成完成/拒绝(resolved/reject)状态(一旦栈中为空)。

说明

这个方法对于返回第一个已完成的 promise 是有用的。在一个 promise 完成后它就会终止,因此它不用等待其他的 promise 全部完成,只要发现一个就够了。

不像 Promise.all() 会返回一组完成值那样(resolved values),我们只能得到一个完成值(假设不止有一个 promise 完成)。这在我们只想要得到一个 promise 完成,而不关心是哪一个完成的时候是有用的。

同时, 也不像 Promise.race() 总是返回第一个结果值(resolved/reject)一样,这个方法返回的是第一个完成的值。这个方法将会忽略掉所有被拒绝的 promise,直到有一个 promise 完成。

完成(Fulfillment):

当任何一个被传入的 promise 完成的时候, 无论其他的 promises 完成还是被拒绝,返回的这个 promise 都会带着已完成的那个 promise 的值异步完成。

  • 如果传入的参数是一个空的可迭代对象, 这个方法将会同步返回一个已经完成的 promise
  • 如果传入的任何一个 promise 已完成, 或者传入的参数不包括任何 promise, 那么 Promise.any 返回一个异步完成的 promise

失败/拒绝(Rejection):

如果所有传入的 promises 都被拒绝, Promise.any 将会异步拒绝,同时返回一个 AggregateError 对象,AggregateError 继承自 Error,并且包含一个指向错误(exceptions)数组的指针。

参见