回答一下
我会先确认两个请求的业务含义,而不是按发送顺序决定。既然题目说“同时发送”,第一个、第二个也不天然代表哪个更重要。 如果必须取消一个,我会分场景回答: 搜索框联想:用户先搜“北京”,又改成“上海”,应该取消旧的“北京”请求,保留最新意图。否则旧请求晚返回,可能把上海的结果覆盖掉。 重复提交:用户连续两次点“提交订单”,通常应该阻止或取消第二次重复请求,保留第一次。但前端取消不能保证服务器没处理,真正避免重复下单还得靠后端幂等。 多路竞速:同时向两个提供相同数据的服务请求,可以保留先返回有效结果的那个,取消还在等待的另一个。不是固定取消第一个或第二个,也不能认为“最先返回错误”就算赢。 独立请求:一个拉用户资料,一个拉消息列表,不能仅凭顺序判断。题目硬性要求取消一个,就需要补充当前页面需要什么、哪个优先级更低,再作取舍。 实现上,fetch 可以为两个请求分别配置 AbortController,决定取消哪个就调用对应的 abort。但要注意两个边界:取消客户端请求不等于回滚服务端操作;对于搜索这类竞态,还可以用请求编号校验响应是否属于最新请求,避免过期结果更新页面。 面试里我的结论就是:取消的是“不再需要、重复或优先级更低的请求”,而不是机械地取消第一个或第二个。考点是业务语义、竞态处理,以及是否理解取消请求的边界。 参考:https://developer.mozilla.org/en-US/docs/Web/API/AbortController