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

axios请求的取消

axios请求的取消

  • 解决:axios请求的取消

解决:axios请求的取消

在使用 Axios 发起请求时,有时候你可能需要取消这些请求,比如当组件销毁时或者用户操作导致不再需要获取之前发起的请求结果。Axios 支持通过 Cancel Token 取消请求。

以下是使用 Axios 的 CancelToken 来取消请求的基本步骤:

创建 Cancel Token:
首先你需要创建一个取消令牌(Cancel Token)。从 Axios 0.18.0 版本开始,推荐的方式是使用 axios.CancelToken.source() 工厂函数来创建一个包含 token 和 cancel 方法的对象。

const source = axios.CancelToken.source();

配置请求使用 Cancel Token:
在发起请求时,将上面创建的 token 传递给请求配置中的 cancelToken 字段。

axios.get('/user/12345', {cancelToken: source.token
})
.then(function(response) {// 处理成功情况
})
.catch(function(thrown) {if (axios.isCancel(thrown)) {console.log('Request canceled', thrown.message);} else {// 处理错误情况}
});

取消请求:
如果你想取消发起的请求,只需调用 source.cancel() 方法,并可以传入一个可选的取消原因作为参数。

source.cancel('用户取消了请求');

在 Vue 组件中管理取消逻辑(例如,在组件销毁前取消请求):

export default {data() {return {cancelSource: null,};},methods: {fetchData() {this.cancelSource = axios.CancelToken.source();axios.get('/someEndpoint', {cancelToken: this.cancelSource.token}).then(response => {// 处理响应数据}).catch(error => {if (axios.isCancel(error)) {console.log('Request canceled');} else {// 处理其他错误}});}},beforeDestroy() {if (this.cancelSource) {this.cancelSource.cancel('Component destroyed, request canceled.');}}
}

以上是在Vue 2 中使用 Axios 取消请求的方法。记得合理管理你的取消令牌,避免内存泄漏或其他潜在问题。

最后附上示例

  • 示例:在输入框里输入1234,会发送4次请求,但只会保留1个请求,其余的请求会被取消

接口处添加cancelToken

export function getERPInfoByDeviceCode(data, cancelToken) {return request({url: '/v1/dfs/deviceInfo/getERPInfoByDeviceCode',method: 'post',params: data,cancelToken, // 添加取消令牌})
}

使用取消请求

// 此处template代码为输入框绑定input事件给getERPInfoByDeviceCodeData()方法即可
<script>
import { getERPInfoByDeviceCode } from '@/api/standard/device-base-api'
import axios from 'axios'
export default {data() {return {cancelToken: null, // 保存取消令牌的引用}},methods: {async getERPInfoByDeviceCodeData() {// 如果存在之前的请求,取消它if (this.cancelToken) {this.cancelToken.cancel('用户取消了请求')}// 创建新的取消令牌const cancelTokenSource = axios.CancelToken.source()this.cancelToken = cancelTokenSourcetry {const params = {}// 请求接口传入cancelTokenSource.token配置await getERPInfoByDeviceCode(params, cancelTokenSource.token)} catch (error) {if (axios.isCancel(error)) {console.log('Request canceled:', error.message)} else {// 处理其他错误console.error('Error fetching info:', error)}}},},
}
</script>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/309140.html

相关文章:

  • ICML 2025 | 深度剖析时序 Transformer:为何有效,瓶颈何在?
  • Qt Quick 3D 基础与应用
  • 【数据结构初阶】--排序(一):直接插入排序,希尔排序
  • zabbix平台无法删除已停用主机的处理案例
  • 基于springboot的快递分拣管理系统
  • 信号发生器和示波器阻抗匹配问题
  • 重生之我在暑假学习微服务第七天《微服务之服务治理篇》
  • flutter设备图标颜色与字体颜色相同自动适配明与暗的模式
  • 力扣 hot100 Day62
  • UnityURP 使用StencilBuffer制作一个“看见看不见”的球
  • 第三方采购流程
  • 前端图片懒加载的深度指南:从理论到实战
  • 使用 whisper, 音频分割, 初步尝试,切割为小块,效果还不错 1
  • java对象的内存分配
  • linux编译基础知识-工具链
  • datagrip连接mysql数据库过程以及遇到的问题
  • Linux网络:多路转接 epoll
  • 深入讲讲异步FIFO
  • Blender 4.5 安装指南:快速配置中文版,适用于Win/mac/Linux系统
  • 汽车EDI:Vitesco EDI 项目案例
  • 基于单片机汽车少儿安全预警系统
  • 【世纪龙科技】汽车整车维护仿真教学软件-智构整车维护实训
  • Oracle EBS ERP开发 — 抛出异常EXCEPTION书写规范
  • 【世纪龙科技】3D交互深度赋能-汽车整车维护仿真教学软件
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现道路汽车的检测识别(C#代码,UI界面版)
  • Apache RocketMQ for AI 战略升级,开启 AI MQ 新时代
  • GXP6040K压力传感器可应用于医疗/汽车/家电
  • 在SQL SERVER 中,用SSMS 实现存储过程的每日自动调用
  • 嵌入式系统教学范式演进:云端仿真平台如何重构温湿度监测实验教学
  • Web开发-PHP应用弱类型脆弱Hash加密Bool类型Array数组函数转换比较