vue3 + axios 中断取消接口请求

news2024/11/18 0:18:22

前言

最近开发过程中,总是遇到想把正在请求的axios接口取消,这种情况有很多应用场景,举几个例子:

  1. 弹窗中接口请求返回图片,用于前端展示,接口还没返回数据,此时关闭弹窗,需要中断接口请求
  2. tab标签页根据后端返回数据,依次渲染,频繁切换标签,需要中断接口请求
  3. for循环中请求接口,遇到跳出循环情况,也需要中断接口请求
  4. 跳转路由,离开页面时,可能也需要中断接口请求

下面就是根据以上问题,找到的解决方案

正文

因为axios不同版本取消请求是不同的,目前最新的 axios 的取消请求api,推荐使用 AbortController ,旧版本的 CancelToken 在 v0.22.0 后弃用,截止到此片文章发表,npm上的axios版本号已经更新到v1.5.1,但是相信有一些项目的版本还是v0.x.x的,所以下面分别介绍两种取消方式,大家根据自己项目axios版本号,自行查看

在这里插入图片描述

v0.22.0 CancelToken

  1. get请求
<el-button type="primary" @click="sendGet()">发送get请求</el-button>
<el-button type="danger" @click="cancel()">取消请求</el-button>

import {ref,onMounted,onUnmounted} from 'vue'
import axios from "axios";

let source:any = null;
const sendGet = ()=>{
	//可以理解为给定每个接口一个标识
  source = axios.CancelToken.source();
  axios.get('请求url',
      {
        cancelToken: source.token
      }
  ).then(res => {
    console.log("get请求",res)
  }).catch(err => {
    if (axios.isCancel(err)) {
      console.log('请求取消', err);
    } else {
      console.log('其他错误', err)
    }
  });
}

const cancel = ()=>{
  source && source.cancel('手动调用 source.cancel方法,手动取消请求');
}

在这里插入图片描述

  1. post请求
<el-button type="success" @click="sendPost()">发送post请求</el-button>
<el-button type="danger" @click="cancel()">取消请求</el-button>

import {ref,onMounted,onUnmounted} from 'vue'
import axios from "axios";

let source:any = null;
const sendPost = ()=>{
  source = axios.CancelToken.source();
  axios.post("请求url",
       {},//传参,没有也必须加上{}
       {
         cancelToken: source.token
       })
       .then((res) => {
         console.log("post请求",res)
       }).catch(err => {
     if (axios.isCancel(err)) {
       console.log('请求取消', err);
     } else {
       console.log('其他错误', err)
     }
   })
}

const cancel = ()=>{
  source && source.cancel('手动调用 source.cancel方法,手动取消请求');
}

在这里插入图片描述

v1.5.1 AbortController

使用fetch() 是一个全局方法,它的请求是基于 Promise 的
method - 请求方法,默认GET
signal - 用于取消 fetch

<el-button type="primary" @click="sendNewGet()">发送get请求</el-button>
<el-button type="danger" @click="cancelController()">取消新版请求</el-button>

import {ref,onMounted,onUnmounted} from 'vue'
import axios from "axios";

let controller:any = null;

const sendNewGet = ()=>{
 controller = new AbortController();   // 新建一个AbortController实例
  fetch('请求url',
      {
        signal: controller.signal    // signal是AbortController实例的属性
      }
  ).then(res => {
    console.log("新版get请求",res)
    //处理返回数据
    res.json().then(res1 => {
      console.log(res1)
    })


  }).catch(err => {
    console.log(err)
  });
}

const cancelController = ()=>{
  controller && controller.abort();//调用abort方法
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1113145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【神印王座】伊莱克斯现身,龙皓晨获得一传承,圣采儿却惨遭反噬

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 神印王座第78集的预告片更新&#xff0c;一个神秘人物伊莱克斯突然现身&#xff0c;他是一个实力强大、统兵能力卓越的统帅&#xff0c;更拥有令人闻风丧胆的亡灵大军。这个传奇人物被誉为永恒之塔的主人&…

Linux下的命令行参数和环境变量

命令行参数 什么是命令行参数 命令行参数是指在执行命令行程序时&#xff0c;给程序传递的额外参数。在Linux终端中&#xff0c;命令行参数通常通过在命令后面添加空格分隔的参数来传递。 Linux下以main函数举例说明 #include<stdio.h>int main(int argc char* argv[])…

svg常用属性及动画效果

文章目录 引言一、什么是svg二、svg有哪些应用场景三、基本使用四、svg常用属性介绍1. viewBox2. preserveAspectRatio3. symbol标签4.transform1. translate2.scale3.rotate4.skewX和skewY 5. matrix6.stroke-dasharray 五、svg动画1. svg属性结合css动画2. animate 标签动画3…

【网络】网络编程套接字(一)

网络编程套接字 一 一、网络编程中的一些基础知识1、认识端口号2、认识TCP协议和UDP协议3、网络字节序 二、socket编程1、sockaddr结构2、简单的UDP网络程序Ⅰ、服务器的创建Ⅱ、运行服务器Ⅲ、关于客户端的绑定问题Ⅳ、启动客户端Ⅴ、本地测试Ⅵ、网络测试 一、网络编程中的一…

20款VS Code实用插件推荐

前言&#xff1a; VS Code是一个轻量级但功能强大的源代码编辑器&#xff0c;轻量级指的是下载下来的VS Code其实就是一个简单的编辑器&#xff0c;强大指的是支持多种语言的环境插件拓展&#xff0c;也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…

升级常有,错误不可避免!更新升级时遇到的错误0x800F081F–0x20003如何修复

Windows更新错误0x800F081F–0x20003主要发生在升级Windows 11/10副本时。这是由于在计算机上启用各种与开发人员相关的设置时出现错误造成的。安装程序遇到的错误被表述为以下任一错误: 我们无法安装Windows 11/10。SAFE_OS阶段的安装失败,INSTALL_UPDATES操作期间出现错误:…

解除OU屏蔽(EBS检查无法直接查询解决)

解除OU屏蔽(EBS检查无法直接查询解决) 具有OU屏蔽的例子 SELECT t.org_id, t.* FROM po.po_headers_all t -- 无屏蔽表&#xff0c;在PL/SQL运行有数据 SELECT t.org_id, t.* FROM apps.po_headers t -- 包含OU屏蔽&#xff0c;在PL/SQL中查询无数据多组织屏蔽原理 1. 在…

免费SSL证书与付费SSL证书的区别

SSL&#xff08;安全套接层&#xff09;证书是网站安全性的关键组成部分&#xff0c;用于保护数据的机密性和完整性。当您考虑在您的网站上部署SSL证书时&#xff0c;您将面临一个重要的决策&#xff1a;是选择免费SSL证书还是付费SSL证书&#xff1f;本文将帮助您理解这两者之…

工具篇之Axure RP 10的使用

引言 最近在学习原型图&#xff0c;针对画原型图的工具&#xff0c;反复对比墨刀、Axure、xiaopiu后&#xff0c;最终选择Axure。 接下来&#xff0c;我便从Axure RP 10的下载、安装、中文字体、授权等几个方面&#xff0c;来介绍Axure。 一、背景 Axure是一款强大的原型设计…

【XSS_MSN】基于GCN的web攻击Payload识别与可解释性分析

原文标题&#xff1a;Web Attack Payload Identification and Interpretability Analysis Based on Graph Convolutional Network 原文链接&#xff1a;https://ieeexplore.ieee.org/document/10076547/ 作者单位&#xff1a;四川大学网络安全学院 相似原理论文&#xff1…

Excel拆分单元格怎么操作?学会这4招,工作效率倍涨!

“刚刚在做一份Excel的报表&#xff0c;需要将某些单元格进行拆分&#xff0c;但是我不知道应该如何处理&#xff0c;大家在使用Excel时有什么比较简单的单元格拆分方法吗&#xff1f;” 当我们需要使用Excel处理大量数据或者创建专业报表时&#xff0c;可能需要对单元格进行拆…

【试题011】C语言多个运算符计算例题

1.题目&#xff1a;表达式1!23/45%6(78)9的值是&#xff1f; 2.代码&#xff1a; #include <stdio.h> int main() {//表达式1 !2 3 / 4 5 % 6 (7 8) 9的值printf("%d\n", (1 !2 3 / 4 5 % 6 (7 8) 9));//分析&#xff1a;多个运算符先考虑优先级…

如何用R语言优雅地玩转PubMed-RISmed包的使用

PubMed是最大的生命科学文献数据库之一&#xff0c;在开展课题使用关键词搜索时&#xff0c;会检索出大量文献。如何对这些文献进行筛选&#xff0c;出了巧妙使用关键词组合外&#xff0c;还可以使用R将相关文献信息一键提取&#xff0c;实现文献的快速浏览。RISmed是一个用于从…

淘宝卖家如何批量采集竞品sku进行分析?推荐2个商品sku获取API

item_sku-获取sku详细信息 请求参数 请求参数&#xff1a;num_iid572050066584&sku_id3880971359554&is_promotion0 参数说明&#xff1a;sku_id:SKU ID num_iid:商品ID is_promotion:是否获取取促销价 API测试页 获取key&secret 响应参数 Version: Date: 名…

实现自动推送:工具助力公众号运营

公众号的运营离不开定期推送内容给用户&#xff0c;但手动推送过程繁琐且耗时。现在&#xff0c;借助乔拓云公众号助手工具&#xff0c;你可以轻松实现自动推送消息的功能。下面&#xff0c;我们一步一步教你如何操作。 首先&#xff0c;我们需要注册并登录乔拓云公众号助手工具…

MATLAB中 tf2zp函数用法

目录 语法 说明 示例 连续时间系统的零点、极点和增益 tf2zp函数的功能是将传递函数滤波器参数转换为零极点增益形式。 语法 [z,p,k] tf2zp(b,a) 说明 [z, p, k] tf2zp(b, a) 从传递函数参数 b 和 a 中找到零点矩阵 z&#xff0c;极点向量 p&#xff0c;以及相关的增益…

uniapp开发多端应用项目时的常见跨端兼容处理

一、跨端兼容 每个端有每个端的特点&#xff0c;有的能被抹平&#xff0c;有的不可能被抹平。 跨端&#xff0c;不是把web的习惯迁移到全平台。而是按照uni的写法&#xff0c;然后全平台使用。 按照uniapp规范开发可以保证多平台兼容&#xff0c;但每个平台有自己的一些特性。…

实用的数据集成方式

随着企业数字化转型的加速推进&#xff0c;数据集成变得愈发重要&#xff0c;它是实现信息流动和系统协同的关键步骤。 数据集成是企业数字化转型的重要一环。利用实用的数据集成方式&#xff0c;企业能够高效地实现信息流动和系统协同&#xff0c;提升企业运营效率和决策能力…

重庆东微电子推出高性能抗射频干扰MEMS硅麦放大器芯片

专业的模拟及混合信号芯片设计企业重庆东微电子股份有限公司日前宣布&#xff1a;成功开发并推出其第三代硅基微机电系统麦克风&#xff08;Silicon MEMS Microphone&#xff0c;以下简称“MEMS麦克风”&#xff09;模拟接口放大器芯片EMT6913。该芯片针对低功耗MEMS麦克风应用…