JavaScript 中的 AbortController:如何优雅地取消 fetch 请求与清理副作用
在单页应用里,用户快速切换路由、连续触发搜索或者重复提交表单时,发出去的异步请求往往已经不再需要了。浏览器虽然会继续接收响应,但回调里执行的状态更新可能覆盖掉最新的结果,甚至对已经卸载的组件执行 setState,造成内存泄漏或界面闪烁。过去我们用 XMLHttpRequest 的 abort 方法,或者引入 axios 的 CancelToken,现在浏览器原生提供了 AbortController 和 AbortSignal,可以统一取消 fetch、监听事件流以及清理各种异步副作用。这篇文章不堆砌 API 列表,而是从实际开发中常见的搜索框竞态、组件卸载后清理、超时控制这几个场景出发,说...