取消请求实战

关于前端取消请求,大多数文章都是new AbortController() 然后将signal放到请求中,然后执行abort取消,这种文章怎么好意思拿出来啊,mmmmini版的官方文档罢了。

首先要明确我们想要的效果是什么,可以对比一下toast.showloading(),当我们发起一个请求打开loading时,什么时候关闭是由我们随时随地决定的。随时就不解释了,随地就是我在组件中打开了loading,我可以其他任何组件中关闭这个loading。

话不多说,看我操作

首先封装一个全局公共类

export default class CancelManager {cancelMapstatic instanceconstructor() {this.cancelMap = new Map()this.cancelKey = []}static getInstance() {if (!CancelManager.instance) {CancelManager.instance = new CancelManager()}return CancelManager.instance}has(key) {return this.cancelMap.has(key)}hasCancel(key) {return this.cancelKey.includes(key)}getSignal(key) {if (!key) {console.log('getSignal的key不能为空')return}const controller = new AbortController()const { signal } = controllerthis.cancelMap.set(key, controller)return signal}cancel(key) {const task = this.cancelMap.get(key)if (!task) {console.log(key + '控制器不存在')return}task.abort()this.delete(key)this.cancelKey.push(key)console.log(key, '请求已取消,cancelKey=>>', this.cancelKey)}cancelAll() {this.cancelMap.forEach((task) => {task.abort()})this.cancelKey = []this.cancelMap.clear()}delCancelKey(key) {this.cancelKey = this.cancelKey.filter((v) => v !== key)}delete(key) {this.cancelMap.delete(key)}clear() {this.cancelMap.clear()}
}

使用

 //这里的id也可是是这个函数,因为里面是用的Map存储,保证唯一性即可,以及方便在其他地方能拿到这个idconst controller = CancelManager.getInstance()//单例模式随处get都行const signal = controller.getSignal(id)//此处只需将signal传给axios等请求库就行了const res = await getData(params, { signal })

取消

 const controller = CancelManager.getInstance()controller.cancel(id)

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

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

相关文章

InternLM2 技术报告——社区翻译版

InternLM2技术报告于近日正式对外发布,不少社区大佬自发地参与到报告的翻译与解读中来。本文为社区用户翻译的InternLM2技术报告原文,分享给大家~ 论文地址: https://arxiv.org/pdf/2403.17297.pdf 摘要 大型语言模型(LLMs&…

红队内网攻防渗透:内网渗透之内网和域信息收集

红队内网攻防渗透 1.内网渗透之信息收集1.内网信息收集的目的2.本机信息收集网络配置查询操作系统及版本信息查看系统体系结构查看安装的软件及版本、路径等查询本机服务查询进程列表查毒软件查看启动程序信息查看计划任务查看主机开机时间查询用户列表获取本地管理员查看当前在…

unity的引用传递和数组的联系

引用传递 //引用传递 static void SetY(out int x,out int y ){x 0;y 0;x 1000;}static void Main(string[] args){int x 0;int y 10;SetY(out x, out y);Console.WriteLine($"x{x},y{y}");} 结果是:x1000,y0 数组的引用传递 数组值…

Linux 创建命令

在学习linux操作系统时,一般从最基本的cd、pwd命令,到常用命令mkdir、cat、df等,再到高级命令sed、awk、nmcli、crontab等,学习linux时会遇到大量命令。当我们不会使用时,可以借助man、info、--help等,查看如何使用,从中学习选项、参数等设置方法。 当进一步学习bash编…

Java基础常见面试总结

文章目录 1. 变量、数据类型转换、运算符1.1 变量1.2 数据类型转换1.2.1强转的注意事项 1.3 进制的转换1.4 位运算符1.5 运算符1.6 三元运算符 2. 流程控制2.1 键盘录入_Scanner2.2 Random随机数2.3 switch(选择语句)2.4 分支语句2.5 循环语句 3. 数组3.1 数组的定义3.2 数组操…

LeetCode热题100

一丶哈希 1、两数之和 方法一&#xff08;自己想到&#xff09;&#xff1a;暴力枚举&#xff0c;两次循环遍历所有相加的情况 class Solution {public int[] twoSum(int[] nums, int target) {for(int i0;i<nums.length;i){for(int ji1;j<nums.length;j){if(nums[i]nu…

证件照小于30kb怎么弄?这个工具三步搞定

当我们需要将照片上传到各种平台时&#xff0c;常常会遇到图片文件大小限制的问题。无论是社交媒体平台还是工作需求&#xff0c;如果照片文件过大&#xff0c;系统会提示上传失败或无法上传。想要解决的这个问题&#xff0c;可以选择将图片压缩指定大小&#xff0c;比如图片压…

蓝桥杯-求阶乘

问题描述 满足 N!的末尾恰好有 区 个o的最小的 N 是多少? 如果这样的 N 不存在输出 -1。 输入格式 一个整数 区。 输出格式 一个整数代表答案。 样例输入 样例输出 10 评测用例规模与约定 对于 30% 的数据,1<K<106 对于 100% 的数据,1<K<1018 运行限制 最大运行时…

Redis 分区:构建高性能、高可用的大规模数据存储解决方案

在 Redis 中&#xff0c;分区是一种将数据分布在多个实例上的技术&#xff0c;用于处理大规模数据和提高系统性能。通过分区&#xff0c;可以将数据均匀地分布在多个节点上&#xff0c;从而减轻单个节点的负载压力&#xff0c;并实现水平扩展。 Redis 分区应用场景 1. 大规模…

Go语言中如何处理goroutine和循环变量

对goroutine和循环变量处理不当可能是Go开发人员在编写并发应用程序时最常犯的错误之一。让我们看一个具体的例子,然后我们将定义发生此类错误的条件以及如何防止发生这类错误。 在下面的示例中,我们初始化一个切片,然后在作为新goroutine执行的闭包中访问这个元素: s := …

【Git教程】(九)版本标签 —— 创建、查看标签,标签的散列值,将标签添加到日志输出中,判断标签是否包含特定的提交 ~

Git教程 版本标签&#xff08;tag&#xff09; 1️⃣ 创建标签2️⃣ 查看存在的标签3️⃣ 标签的散列值4️⃣ 将标签添加到日志输出中5️⃣ 判断tag是否包含特定的提交&#x1f33e; 总结 大多数项目都是用 1.7.3.2和 “ gingerbread” 这样的数字或名称来标识软件版本的。在 …

5g和2.4g频段有什么区别

运行的频段不同 2.4G和5G频段的主要区别在于它们运行的频段不同&#xff0c;2.4G频段运行在2.4GHz的频段上&#xff0c;而5G频段&#xff08;这里指的是5GHz频段&#xff09;运行在5GHz的频段上。12 这导致了两者在传输速度、覆盖范围、抗干扰能力等方面的明显差异。以下是详…

数字图像处理与交叉学科中名词的拧巴

特征提取 图像处理——对图像、目标或特征点进行定量描述的方法及过程。 模式识别——对原特征进行特征变换&#xff0c;从高维空间到低维空间映射。 特征向量 模式识别、图像处理——一个观测包括多个变量&#xff0c;样本的多个特征组成特征向量。 线性代数——特征值对应的…

[闲聊统计]之参数估计是什么?(下)

我们在前面说了一下参数估计中的点估计&#xff0c;接下来&#xff0c;我们来讲一下区间估计。 区间估计——在点估计的基础上&#xff0c;给出总体参数估计的一个估计区间&#xff0c;该区间由样本统计量加减估计误差而得到。 置信水平——如果将构造置信区间的步骤重复多次&a…

01背包问题 小明的背包

2.小明的背包1 - 蓝桥云课 (lanqiao.cn) #include <bits/stdc.h> using namespace std; const int N1010;//开始写的105 开小了 样例过了但最后只过了很少一部分 int n,m; int v[N],w[N]; int f[N][N];int main() {cin>>n>>m;for(int i1;i<n;i){cin>&…

java语法:后端接收json对象

一、接收json格式对象 RequestBody String jsonObject 二、如何将json转成实体类 fastjson依赖 <!-- 9.fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version&…

javaWeb新闻发布及管理系统

摘 要 随着电脑、智能手机等能够连接网络设备的家庭化和大众化&#xff0c;各种网站开始被设计和开发出来&#xff0c;功能多种多样&#xff0c;涉及的领域也各有不同&#xff0c;生活、商业、科技等等。而信息的发布是网络的一大特点&#xff0c;人们上网的主要需求就是汲取自…

中高级前端需要掌握哪些Vue底层原理

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

javase_进阶 day10 集合2

泛型介绍 JDK5引入的, 可以在编译阶段约束操作的数据类型, 并进行检查注意 : 泛型默认的类型是Object 泛型的好处 统一数据类型&#xff0c;将运行期的错误提升到了编译期统一数据类型 常见的泛型标识符 : E V K T E : Element T : Type K : Key(键) V : Value(值)总结&am…

基于SSM+Jsp+Mysql的二手车交易网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…