用 AbortController 取消 Fetch 请求时,为什么你的清理逻辑没有生效?
在单页应用里,搜索框实时请求、路由切换时中止旧请求、组件卸载时取消未完成的接口调用,这些场景都会用到 AbortController。表面上看,只要在 fetch 里传入 signal,然后在需要的时候调用 abort() 就结束了。但真实项目里经常出现“请求确实断了,可 loading 还在转”“catch 里判断 AbortError 不生效”“取消之后又收到了旧数据”这类问题。原因通常不是 AbortController 本身,而是 signal 的生命周期管理、错误类型判断、以及取消后异步链路的状态清理没有对齐。这篇文章从实际代码出发,梳理几种常见的失效场景,包括 signal 复用、...