Promise.any返回首个成功结果,全失败才以AggregateError拒绝;Promise.race则谁先完成(无论成败)即结束,首个失败即整体失败。
Promise.any 解决的是“只要有一个成功就继续”的需求,而 Promise.race 是“谁先完成(无论成功或失败)就立即结束”。两者在竞态逻辑上目标不同,适用场景也明显区分。
它等待所有 Promise 中第一个 fulfilled(成功)的结果,忽略那些被 reject 的。只有当所有输入 Promise 都 rejected 时,才以 AggregateError 拒绝。
它对 fulfilled 和 rejected 一视同仁,只要有一个 Promise 改变状态(不管成功还是失败),就立刻决议,并把该结果或错误抛出。
setTimeout 包装的 Promise 一起 raceany 的本质区别
假设有三个 Promise:
那么:Promise.race([P1, P2, P3]) → 100ms 后以 'err2' reject(因为 P2 最快且失败)Promise.any([P1, P2, P3]) → 200ms 后以 'A' resolve(忽略 P2 失败,取首个成功)

Promise.any 的失败是“全军覆没”式的——只有全部 rejected 才触发 catch,且错误对象是 AggregateError,内含所有原始错误。Promise.race 的失败是“一票否决”式的——第一个 reject 就终止,错误就是那个最先发生的原始错误。
不复杂但容易忽略。