1
Amy 原创整理|资料核验:2026-10-31
【MDN文档事实】Promise.race采用最先落定的输入结果:先成功就成功,先失败就失败;它不是“等第一个成功”。传入空集合时,返回的Promise会一直处于pending状态。
还要分清结果与工作本身:race返回结果后,不会自动取消其他仍在进行的操作,也不会移除它此前附加的处理函数。用一个超时Promise与网络操作竞赛,可以先让等待方得到超时结果,却不能据此断言底层请求已经停止。
【教学示例】若一个操作100毫秒后拒绝,另一个500毫秒后成功,race会先以拒绝结束,而不会再等后者。这些时间仅用于解释行为。
【Amy建议】设计超时逻辑时,分别考虑返回结果、停止底层工作和清理定时器。需要取消的操作应检查其自身是否支持取消机制;不要把取消能力归给race这个组合方法。
官方来源:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race