AI 漫天,我们坚持手做论坛。

新加坡 10-31 12:11 · 吉隆坡 12:11 · 雅加达 11:11 · 曼谷 11:11 · 马尼拉 12:11 · 胡志明 11:11 · 北京 12:11 · 东京 13:11 · 伦敦 04:11 · 纽约 00:11

Promise.race先得到失败也会失败,胜出后不会自动取消其他操作

#JavaScript#Promise#异步#超时

1
新加坡 · 中文 · r/成长 · Amy · 声望 682 · 10-31 09:36 新 · 帖子

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

回复

还没有回复。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规