当前位置: 首页 > news >正文

Vue3中AbortController取消请求的用法详解

在 Vue3 中,AbortController 用于取消 fetch 请求,避免组件卸载后仍执行异步操作导致的潜在问题(如内存泄漏或更新已销毁组件的状态)。以下是详细用法和最佳实践:


一、基本用法

  1. 创建 AbortController 实例
    在组件 setup() 中创建实例,并通过 signal 关联请求:

    javascript

    import { onUnmounted } from 'vue';export default {setup() {const controller = new AbortController();const signal = controller.signal;// 发送请求时传递 signalfetch('/api/data', { signal }).then(response => response.json()).catch(err => {if (err.name === 'AbortError') {console.log('请求已取消');} else {console.error('请求失败:', err);}});// 组件卸载时取消请求onUnmounted(() => controller.abort());return {};},
    };

二、结合异步操作

在异步函数中结合 AbortController

javascript

import { onUnmounted } from 'vue';export default {setup() {const controller = new AbortController();const fetchData = async () => {try {const response = await fetch('/api/data', { signal: controller.signal });const data = await response.json();// 处理数据} catch (err) {if (err.name === 'AbortError') {console.log('请求已取消');} else {console.error('请求失败:', err);}}};fetchData();onUnmounted(() => controller.abort());},
};

三、管理多个请求

单个 AbortController 可取消多个请求:

javascript

const controller = new AbortController();// 请求1
fetch('/api/data1', { signal: controller.signal });// 请求2
fetch('/api/data2', { signal: controller.signal });// 取消所有请求
controller.abort();

四、与 Axios 结合使用

如果使用 Axios,可通过 CancelToken(旧版)或 AbortController(Axios >= 0.22.0)取消请求:

javascript

import axios from 'axios';const controller = new AbortController();axios.get('/api/data', {signal: controller.signal,
}).then(response => { /* ... */ }).catch(err => {if (axios.isCancel(err)) {console.log('请求已取消');}});// 取消请求
controller.abort();

五、注意事项

  1. 兼容性
    AbortController 在现代浏览器中支持良好,但需考虑旧版浏览器兼容性(可通过 polyfill 解决)。

  2. 错误处理
    捕获 AbortError 避免未处理的 Promise 拒绝。

  3. 复用 Controller
    每次新请求前创建新的 AbortController,避免重复使用已取消的实例。


六、最佳实践

  • 在组件卸载时取消请求:在 onUnmounted 生命周期钩子中调用 abort()

  • 封装可复用的逻辑:将取消逻辑封装到自定义 Hook 中(如 useFetch)。

  • 避免内存泄漏:确保所有未完成的请求在组件销毁时被取消。


通过合理使用 AbortController,可以有效管理 Vue3 中的异步操作,提升应用性能和稳定性。

http://www.xdnf.cn/news/152209.html

相关文章:

  • Log4j Properties 配置项详细说明
  • 如何判断你的PyTorch是GPU版还是CPU版?
  • 4.23-4.26学习总结 HTML—CSS常见标签和样式
  • 实验四 进程调度实验
  • Adriuno:编程语言基础
  • 使用 Truffle 和 Ganache 搭建本地以太坊开发环境并部署一个简单智能合约
  • [mysql]约束(上)
  • 使用 Frida 绕过 iOS 应用程序中的越狱检测
  • 自动化测试实战篇
  • 【Web应用服务器_Tomcat】二、Tomcat 核心配置与集群搭建
  • 关于Code_流苏:商务合作、产品开发、计算机科普、自媒体运营,一起见证科技与艺术的交融!
  • Kettle学习
  • 利器善其事:软件开发工具管理之道
  • Sam算法基本原理解析
  • 基于大模型对先天性幽门肥厚性狭窄预测及临床方案的研究报告
  • MH2103 MH22D3系列的JTAG/SWD复用功能和引脚映射,IO初始化的关键点
  • C#中常见的设计模式
  • 第十六届蓝桥杯网安初赛wp
  • 关于flink两阶段提交高并发下程序卡住问题
  • 2025.04.26-美团春招笔试题-第四题
  • 设计看似完美却测不过? Intra-Pair Skew 是「讯号完整性(Signal Integrity)」里最隐形的杀手
  • 【C】初阶数据结构12 -- 冒泡排序
  • 买币永续合约成全球交易热点,XBIT去中心化交易所平台显著提升市场流动性
  • 联想笔记本电脑在Windows下通过联想驱动实现风扇控制
  • 从像素到驾驶决策:Python与OpenCV赋能自动驾驶图像识别
  • django之账号管理功能
  • MySQL 数据类型
  • WPF高级用法示例
  • 【含文档+PPT+源码】基于Python校园跑腿管理系统设计与实现
  • C语言中字符类型的定义、存储与输出详解