Promise.any()
接收一个Promise.all()
是相反的。
注意! Promise.any()
方法依然是实验性的,尚未被所有的浏览器完全支持。它当前处于 TC39 第三阶段草案(Stage 3)
语法
Promise.any(iterable);
参数
返回值
- 如果传入的参数是一个空的可迭代对象,则返回一个 已完成(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)数组的指针。