现在我们可以使用 Promise.allSettled 来获取所有给定 Promise 的结果,即使其中一些被 reject.

Promise.race

下列代码将会打印第一个状态变为 fulfilled 的 Promise 的值,即1:

这里的第一个promise是最快的,所以就变成了结果。 在第一个确定的 Promise win the race之后,所有进一步的结果/错误都将被忽略。

Promise.any

与 Promise.race 类似,但只等待第一个 fulfilled 的 Promise 并获得其结果。 如果所有给定的 Promise 都被拒绝,则返回的 Promise 会被 AggregateError 拒绝——这是一个特殊的错误对象,它将所有 Promise 错误存储在它的 errors 属性中。

这里的第一个promise是最快的,但是被 reject 了,所以第二个promise就变成了结果。 在第一个 fulfilled 的 Promise win the race 之后,所有进一步的结果都将被忽略。

这是一个所有 Promise 都失败的例子:

如我们所见,失败的 Promise 的错误对象在 AggregateError 对象的 errors 属性中可用。