Vue 请求封装怎么实现页面跳转时自动取消当前页面的未完成请求

舞姬之光

舞姬之光

2026-08-02

192人浏览

原创

vue请求封装实现页面跳转自动取消未完成请求的核心是“标记请求+统一取消”:通过abortcontroller为每个请求注入signal并存入全局容器,在路由守卫beforeeach中批量abort,响应拦截器静默处理取消错误,并支持白名单、接口豁免及组件级精细控制。

vue 请求封装怎么实现页面跳转时自动取消当前页面的未完成请求

Vue 请求封装实现页面跳转时自动取消当前页面未完成请求,核心在于“标记请求 + 统一取消”:在每次发请求时生成可取消标识(如 CancelTokenAbortController.signal),存入全局管理容器;在路由跳转前遍历并触发取消逻辑。关键不是拦截每个组件,而是让请求本身具备可取消性,并由路由守卫统一调度。

用 AbortController 实现(推荐 Vue3 + Axios 1.5+)

现代 Axios(v0.22+)和浏览器原生支持 AbortController,语义清晰、兼容性好,且天然支持多请求批量取消。

  • 在请求拦截器中为每个请求注入 signal


const controller = new AbortController();
config.signal = controller.signal;
// 存入全局数组或 Pinia store
abortControllers.push(controller);
return config;

  • router.beforeEach 中批量终止:


router.beforeEach((to, from, next) => {
  abortControllers.forEach(c => c.abort('route change'));
  abortControllers.length = 0;
  next();
});

  • 响应拦截器中静默处理取消错误(避免报错打断流程):

service.interceptors.response.use(
  res => res,
  error => {
    if (error.name === 'CanceledError' || error.name === 'AbortError') {
      return Promise.resolve({ data: null, status: 0 }); // 或自定义空响应
    }
    return Promise.reject(error);
  }

Vue-router参考手册
Vue-router参考手册

Vue-router参考手册下载

下载
  • 请求拦截器中创建并缓存 cancel 函数:

axios.CancelToken.source();
config.cancelToken = source.token;
cancelTokens.push(source.cancel); // 存入数组或 store

  • 路由守卫中执行全部取消:

router.beforeEach(() => {
  cancelTokens.forEach(fn => fn('route leave'));
  cancelTokens.length = 0;
  next();
});

  • 响应拦截器中识别取消错误并过滤:

if (axios.isCancel(error)) {
  return Promise.resolve({ data: null });
}

结合 Pinia 管理取消句柄(Vue3 推荐)

相比 Vuex,Pinia 更轻量、TypeScript 友好,适合集中管理请求生命周期。

  • 定义 store 存储控制器列表:

// stores/useRequestStore.js
export const useRequestStore = defineStore('request', {
  state: () => ({
    controllers: []
  }),
  actions: {
    add(controller) { this.controllers.push(controller); },
    clear() {
      this.controllers.forEach(c => c.abort());
      this.controllers = [];
    }
  }

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

545

5

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

10598

5

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

2026.02.10

153

23

火山引擎API Key获取教程
火山引擎API Key获取教程

火山引擎API Key适合需要调用火山引擎云服务、AI模型、火山方舟接口或其他开放能力的开发者参考。本专题整理控制台入口、账号认证、服务开通、API Key创建、密钥复制保存、权限检查、调用测试和Key无效等常见问题排查。

2026.08.04

3

10

火山引擎API接入教程
火山引擎API接入教程

火山引擎API接入适合需要在应用、脚本、后台服务或AI工具中调用火山引擎能力的开发者参考。本专题整理控制台入口、服务开通、API Key获取、接口地址配置、请求参数填写、调用测试、权限设置、额度查询和常见接口报错排查。

2026.08.04

4

10

火山引擎DeepSeek API调用教程
火山引擎DeepSeek API调用教程

火山引擎DeepSeek API适合需要在应用、脚本、智能体或AI编程工具中调用DeepSeek模型的开发者参考。本专题整理火山引擎控制台入口、模型服务开通、API Key获取、Base URL配置、模型名称填写、调用测试、额度查询和常见接口报错排查。

2026.08.04

2

10

火山引擎控制台操作教程
火山引擎控制台操作教程

火山引擎控制台中常用功能包括API密钥管理、模型调用配置、云资源查看、账单明细、用量统计和权限分配。本专题整理控制台基础操作、服务开通流程、Key创建与保存、费用消耗查看、子账号权限设置和调用失败排查,方便开发者完成日常管理。

2026.08.04

3

10

PDF与PPT格式转换操作方法及在线转换技巧
PDF与PPT格式转换操作方法及在线转换技巧

本专题聚焦 PDF 与 PPT 文件格式转换需求,整理 PDF 转 PPT 在线转换方法、PPT 批量转换 PDF 操作步骤、转换后格式错乱处理以及文档版式检查技巧。通过详细教程帮助用户掌握 PDF、PPT 双向转换方法,解决演示文稿制作、文件整理和办公格式转换中的常见问题,提高办公效率。

2026.07.31

112

6

PDF合并文件操作方法与在线批量合并技巧
PDF合并文件操作方法与在线批量合并技巧

本专题聚焦 PDF 文件合并与文档整理需求,整理多个 PDF 合并成一个文件、图片批量转换 PDF、合同附件合并发送以及在线 PDF 合并操作方法等实用教程。通过详细步骤介绍 PDF 合并流程、文件顺序检查技巧和免费在线合并方案,帮助用户快速整理零散文档,提高办公文件处理效率。

2026.07.31

88

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 15.5万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.2万人学习