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

Vue3取消网络请求的方法(AbortController)

在 Vue3 中,已经发出的请求是否可以被取消,取决于你使用的 HTTP 客户端库。Vue3 本身不直接处理 HTTP 请求,但通常搭配 Axios 或原生 fetch 使用。以下是两种主流方案的取消方法:


1. 使用 Axios + CancelToken

Axios 提供了 CancelToken 机制(新版推荐 AbortController,但 CancelToken 仍可用)。

javascript

import axios from 'axios';// 在 Vue3 组件中
export default {setup() {const cancelTokenSource = axios.CancelToken.source();const fetchData = async () => {try {const response = await axios.get('/api/data', {cancelToken: cancelTokenSource.token});// 处理响应} catch (error) {if (axios.isCancel(error)) {console.log('请求被取消:', error.message);} else {// 处理其他错误}}};// 取消请求的方法const cancelRequest = () => {cancelTokenSource.cancel('用户主动取消请求');};return { fetchData, cancelRequest };},
};

2. 使用 Fetch API + AbortController

原生 fetch 可通过 AbortController 取消请求。

javascript

// 在 Vue3 组件中
export default {setup() {let abortController = new AbortController();const fetchData = async () => {try {const response = await fetch('/api/data', {signal: abortController.signal});// 处理响应} catch (error) {if (error.name === 'AbortError') {console.log('请求被取消');} else {// 处理其他错误}}};// 取消请求的方法const cancelRequest = () => {abortController.abort();// 重新创建 Controller,以便下次请求使用abortController = new AbortController();};return { fetchData, cancelRequest };},
};

最佳实践

  • 在组件卸载时自动取消
    利用 Vue3 的生命周期钩子 onBeforeUnmount,避免组件卸载后仍更新状态。

javascript

import { onBeforeUnmount } from 'vue';export default {setup() {const abortController = new AbortController();const fetchData = async () => {// ... 使用 abortController.signal};onBeforeUnmount(() => {abortController.abort();});return { fetchData };},
};
  • 封装自定义 Hook
    使用 Composition API 封装可复用的请求逻辑。

javascript

// useFetch.js
import { ref, onBeforeUnmount } from 'vue';export function useFetch(url) {const data = ref(null);const error = ref(null);const abortController = new AbortController();const fetchData = async () => {try {const response = await fetch(url, { signal: abortController.signal });data.value = await response.json();} catch (e) {if (e.name !== 'AbortError') error.value = e;}};onBeforeUnmount(() => abortController.abort());return { data, error, fetchData, cancel: () => abortController.abort() };
}

关键点总结

  • Axios:使用 CancelToken.source() 或 AbortController(Axios >= 0.22.0)。

  • Fetch:必须依赖 AbortController

  • 组件销毁时清理:通过生命周期钩子自动取消未完成的请求,避免内存泄漏。

  • 错误处理:捕获取消错误,避免与常规错误混淆。

根据项目使用的库选择对应方案即可实现请求取消。

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

相关文章:

  • android开发中的多线程、数据存储同步功能实现方案和应用场景
  • 【SpringBoot】基于MybatisPlus的博客管理系统(1)
  • 常见的硬盘分类
  • SpringBoot、微服务与AI场景题深度解析
  • neo4j基础操作:命令行增删改查
  • java web 过滤器
  • 华为云IAM用户权限设置主要有哪些问题需要注意?
  • 医疗生态全域智能化:从技术革新到价值重塑的深度探析
  • 激光驱鸟:以科技重构生态防护边界
  • JavaAPI — 包装类与正则表达式
  • 从厨房到云端:从预制菜到云原生
  • kotlin flatMap 变换函数的特点和使用场景
  • SpringBoot Actuator未授权访问漏洞的全面解析与解决方案
  • 【uom】 0 配置文件(Cargo.toml)
  • vscode chrome调试怎么在所有浏览器都好使
  • jmeter-Beashell获取请求body data
  • 音视频之H.265/HEVC网络适配层
  • 打造惊艳的渐变色下划线动画:CSS实现详解
  • [C++]C++20协程的原理
  • 【MySQL】聚合查询 和 分组查询
  • 大脑、机器人与贝叶斯信念及AI推理
  • Spring MVC 进阶 - 拦截器、异常处理、数据校验
  • 【网络编程】UDP协议 和 Socket编程
  • Nginx核心功能
  • 数据一致性巡检总结:基于分桶采样的设计与实现
  • 青少年编程与数学 02-018 C++数据结构与算法 16课题、贪心算法
  • HCIA-Datacom 高阶:VLAN、VLANIF 与静态路由综合实验
  • 清华与智谱联合发布TTS模型GLM-4-Voice,支持情绪、语气控制,多语言,实时效果很不错~
  • nginx 核心功能
  • Python异常抛出指南