Promise.all、allSettled、race 和 any 如何选择?
根据成功条件和失败处理方式,选择合适的并发组合。
参考答案
| 方法 | 完成条件 |
|---|---|
all | 全部成功时成功,任意失败就拒绝 |
allSettled | 等全部结束,返回每项的状态和值或原因 |
race | 跟随第一个敲定的 Promise,成功或失败都可以 |
any | 第一个成功即成功,全部失败才以 AggregateError 拒绝 |
all 和 allSettled 的结果顺序与输入顺序一致,不是完成顺序。这些方法不会自动取消其他请求;可使用支持 AbortSignal 的 API 主动取消。
边界情况:空数组传给 all、allSettled 会得到已兑现的 Promise;any 会拒绝;race 会一直待定。兑现后的 .then 仍以微任务执行。