axios取消请求,解决接口返回顺序错乱问题

下面的方案适用于系统中的某个请求的取消,项目的请求使用 axios 封装

使用场景:当页面有多个 tab,例如年、月、日的列表数据,当点击切换的时候要获取对应的数据,此时如果快速点击在tab直接反复横跳会出现下面的问题:

  1. 重复请求,切换了tab旧的页面已经看不见,没必要存留

  2. 如果使用同一套UI组件,只是数据的改变,异步的原因可能当前tab请求已经结束,然后旧的请求后结束,导致当前的页面的数据渲染出来对应不上tab

使用了 axios.CancelToken 去解决这个问题,下面讲解如何去封装

1、防抖节流

第一种能想到的简单的解决办法是使用 防抖节流去处理,发起请求的函数会被取消,但是接口是异步的,没有实质得解决问题,防抖和节流没有解决接口的调用返回顺序的问题,解决的是防止一个接口在短时间内被多次调用的问题,简单来说就是降低调用频率。

第二种能想到的简单方法就是 加锁/加loading,上一次请求未结束之前禁止用户做任何操作,显然这个也是不合理的

2、取消单个重复请求

使用 cancelToken 的语法,把当前请求的取消方法存储起来,当新的请求来到,调用取消方法取消上一次的请求

// 全局封装axios请求

import axios from "axios"

let request = axios.create({
  baseURL: 'www.baudi.com',
})

request.interceptors.request.use((config) => {
  // token
  const { url, headers } = config
  headers["Content-Type"] = "application/json";
  headers.token = 'Bear Lorem ipsum dolor sit, amet consectetur adipisicing elit. Omnis libero assumenda sit cumque natus quasi reiciendis. Quam vitae qui rerum cupiditate expedita dicta deserunt? Quaerat aliquid tempora laudantium quisquam dicta?'
  return config
}, error => {
  return Promise.reject(new Error(error))
})


request.interceptors.response.use(
  // 响应的统一处理
  (res) => {
    const { status } = res.data
    if(status !== 200) {
      return Promise.reject(new Error('请求错误'))
    }
    return Promise.resolve(res)
  },
  // 错误处理
  error => {
    return Promise.reject(new Error(error))
  }
)

export { request }
// api文件夹下 对业务请求的封装

import { request } from "@/request";

//用户列表请求
let cancelFn = () => {}
export const getUserTypeList = () => {
  cancelFn()
  return request({
    url: '/api/user/type/list',
    cancelToken: new axios.CancelToken(c => cancelFn = c )
  })
}

new axios.CancelToken() 中将取消方法c 缓存到了 cancelFn身上,每次发起请求前都调用前一次请求的取消方法,可以看到以下效果

并且,所有的请求都会带上请求配置,例如在请求头中带上了Token

3、当前项目取消重复请求

需要在全局封装axios请求 使用 map(对象)去缓存正在进行中的请求,并使用该请求的url作为key,如果该请求成功、错误、取消都需要从 map(对象) 删除。如果一个请求正在请求中,下一个请求进来,我们可以在 map(对象)中发现存在值,则调用取消请求的方法。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8S - Service简介和 1个简单NodePort例子

大纲图 流量方向 如上图, 当用户or 别的service 从k8s 集群外部访问 集群内的services 流量方向有两种 一种是垂直方向, 通过域名 -> Load Balancer -> gateway -> services , 在k8s 一般是通过ingress 来实现, 而ingress 不是本文…

免费https详细教程

简单叙述一下https的定义和实现https的一些基本作用,然后会给到申请SSL证书的方式以及安装部署流程,最终实现网站的https访问。 随着互联网的快速发展,网络安全问题日益凸显。在互联网上传输敏感信息、进行在线交易和共享个人数据时&#xf…

nginx配置实例-负载均衡

目录 一、目的:实现效果 二、准备工作 三、实验部署 3.1修改第二台Tomcat服务器的监听端口为8081 3.2修改完成后,重新启动tomcat8081这台服务器。 3.3在浏览器测试 3.4在两台tomcat里面webapps目录中,创建名称是edu的文件夹&#xff0c…

Vue的学习之旅-part3

Vue的学习之旅-part1 vue的自带指令v-model的修饰符 一般用于input输入框中v-model.numberv-model.trimv-slot 作用域插槽具名插槽插槽-组件数据传递注意点1:注意点2: v-on: 绑定触发事件v-on监听事件的修饰符冒泡: 通过.stop阻止阻止默认行为…

软考118-上午题-【软件工程】-能力成熟度模型

一、考试题型 选择题(13题) 二、能力成熟度模型CMM 能力成熟度模型CMM的研究目的是:提供一种评价软件承接方能力的方法,同时它可帮助软件组织改进其软件过程。 CMM 将软件过程改进分为以下5个成熟度级别: 1、初始级…

探索实践昏暗光线低光照场景下目标检测,基于YOLOv7【tiny/l/x】模型开发构建昏暗光线低光照场景下的目标检测识别系统

昏暗光线低光照条件下的目标检测问题,是机器视觉领域一个长期存在且持续受到关注的挑战。这个问题的背景主要源自现代社会对机器视觉技术的广泛需求,特别是在光线条件不佳的环境下,如夜间监控、自动驾驶、安防系统等场景。在昏暗光线或低光照…

849. Dijkstra求最短路 I

tips: 采用0x3f3f3f3f作为一个极大值: 1061109567 //是一个很大的数,可以用来代表∞; 在memset里0x3f表示为0x3f3f3f3f memset(a, 0x3f, sizeof a); //0x是十六进制的意思; memset()是对char操作,即一个…

海外媒体宣发套餐推广8个要点解析为标题-华媒舍

在当前全球化的时代背景下,海外市场的开拓对于企业的发展至关重要。而海外媒体宣传是一种有效的推广方式,可以帮助企业在全球范围内打开市场。本文将对8个海外媒体宣发套餐的推广要点进行解析,帮助企业了解如何在海外市场进行宣传推广。 1. 媒…

js,uniapp,vue,小写数字转化为大写

应用场景: 把1、2、3,转为一、二、三 方法: retBigSrt(num) {const changeNum [零, 一, 二, 三, 四, 五, 六, 七, 八, 九]const unit [, 十, 百]num parseInt(num)const getWan (temp) > {const strArr temp.toString().split().re…

论文阅读《Semantic Prompt for Few-Shot Image Recognition》

论文地址:https://arxiv.org/pdf/2303.14123.pdf 论文代码:https://github.com/WentaoChen0813/SemanticPrompt 目录 1、存在的问题2、算法简介3、算法细节3.1、预训练阶段3.2、微调阶段3.3、空间交互机制3.4、通道交互机制 4、实验4.1、对比实验4.2、组…

软件杯 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…

QT C++(QT对象树与内存泄漏管理,QT中文乱码问题)

文章目录 1. QT对象树与内存泄漏2. QT中文乱码 1. QT对象树与内存泄漏 #include "widget.h" #include "ui_widget.h" #include <QLabel>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//通过代码构…

SpringCloud Alibaba Sentinel 实现熔断功能

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十六篇&#xff0c;即使用 Sentinel 实现熔断功能。 二、 Ribbon 系列 首先我们新建两个服务的提供者…

90天玩转Python—05—基础知识篇:Python基础知识扫盲,使用方法与注意事项

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

神经网络中的超参数调整

背景 在深度神经网络学习和优化中&#xff0c;超参数调整一项必备技能&#xff0c;通过观察在训练过程中的监测指标如损失loss和准确率来判断当前模型处于什么样的训练状态&#xff0c;及时调整超参数以更科学地训练模型能够提高资源利用率。在本研究中使用了以下超参数&#x…

cocos creator 安卓包 输入法遮挡问题

问题描述 Cocos Creator开发版本&#xff1a; v2.4.x 如上效果图。该需求是&#xff0c;进入游戏后&#xff0c;随机角色名&#xff0c;可以自己编辑。在未修改前 手机输入法遮挡了游戏的编辑框&#xff0c;导致无法直观展示&#xff0c;编辑的文字。尝试各种修改清单文件wind…

2024春算法训练4——函数与递归题解

一、前言 感觉这次的题目都很好&#xff0c;但是E题....&#xff08;我太菜了想不到&#xff09;&#xff0c;别人的题解都上百行了&#xff0c;晕&#xff1b; 二、题解 A-[NOIP2010]数字统计_2024春算法训练4——函数与递归 (nowcoder.com) 这种题目有两种做法&#xff1a;…

Golang单元测试和压力测试

一.单元测试 1.1 go test工具 go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程类似&#xff0c;并不需要学习新的语法&#xff0c;规则和工具。 go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内&#xff0c;所有以_test.go为后缀名的…

自定义gitlog格式

git log命令非常强大而好用&#xff0c;在复杂系统的版本管理中扮演着重要的角色&#xff0c;但默认的git log命令显示出的东西实在太丑&#xff0c;不好好打扮一下根本没法见人&#xff0c;打扮好了用alias命令拍个照片&#xff0c;就正式出道了&#xff01; 在使用git查看lo…

物联网可视化平台

随着数字化转型的深入&#xff0c;物联网技术正在成为企业实现智能化、高效化运营的重要工具。物联网可视化平台&#xff0c;作为连接物理世界与数字世界的桥梁&#xff0c;为企业提供了直观、实时的数据展示和监控能力&#xff0c;从而在数字化转型中扮演着关键角色。 一、物…