vue中组件卸载时自动中断请求应使用abortcontroller,通过在统一请求函数预留controller透传入口,在setup/onmounted中创建、onunmounted中abort,并在vue 2中用data声明+beforedestroy清理。

用 AbortController 替代 CancelToken
Axios 自 v0.22.0 起正式推荐 `AbortController`,旧的 `CancelToken` 已被标记为 deprecated。新方式更符合浏览器原生规范,且无需额外维护 token 实例。
- 在发起请求时传入 signal:由
new AbortController().signal生成 - 组件销毁时调用 abort():触发所有关联请求中止
- 请求被取消后,Axios 会抛出
axios.isCancel(error)为 true 的错误,可安全忽略或做日志记录
封装 request 函数支持 controller 透传
不要让每个组件都 new AbortController,而是在统一请求函数里预留入口,让调用方按需传入:
export default function request({ method = 'get', url, data, params, controller }) {
const config = { method, url, data, params };
if (controller) config.signal = controller.signal;
return service(config);
}
这样既保持了灵活性(搜索联想、表单提交等场景可复用 controller),又避免污染基础实例。
使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……
Vue 3 组合式 API 中自动绑定与清理
在 setup 或 onMounted 中创建 controller,并在 onUnmounted 中 abort:
- 用
ref或let存储 controller 实例,确保能被卸载钩子访问 - 每次发请求前检查是否已 abort,避免重复调用 signal
- 错误处理中用
if (error.name === 'CanceledError' || axios.isCancel(error))判断是否主动取消
Vue 2 选项式 API 的兼容写法
虽然 Vue 2 默认不支持 Composition API,但可通过插件或生命周期钩子模拟类似行为:
- 在
data中声明abortController: null - 在
mounted或方法内初始化:this.abortController = new AbortController() - 在
beforeDestroy(Vue 2)或unmounted(Vue 3)中执行this.abortController?.abort() - 请求时传入
{ signal: this.abortController.signal }
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










