用 AbortController 取消 Fetch 请求时,为什么 Promise 还是 resolve 了?
在浏览器里做搜索建议、切换 Tab 重新拉数据、或者组件卸载时取消未完成的请求,很多人会直接用 AbortController 配合 fetch。实际写的时候会遇到一个很反直觉的现象:调了 controller.abort(),请求确实被浏览器断开了,Network 面板里能看到请求变成 canceled,但 fetch 返回的 Promise 并没有按预期走到 catch,反而在 await 之后拿到了一个已经 settle 的 response,甚至在某些封装里后续 response.json() 才抛错。这个问题在 React 的 useEffect 清理函数、Vue 的组件卸载钩子、或...