axios竟态问题

竟态问题

在我们日常开发经常遇到一些竟态问题

例子1

现象1

表格分页,如果设置请求loading,

先切换到分页第99页,迅速在又切换到第1页,最后列表显示的是第99页数据。

原因

由于第99页请求数据花费时间可能500ms,第1页数据只需要100ms,第1页数据请求比较快,第99页数据返回慢,所以第99页数据会覆盖第一页数据。

现象2

表单具有提交按钮,如果没有设置提交请求loading时,连续点击两次,就会触发两次表单提交

原因

请求没有做拦截,第一次请求没有结束,又能触发请求

axios中如何简单防止竟态问题

【注】这里只是简单做了防止重复点击

在axios 请求拦截器中可以设置 cancelToken

复制代码
import axios from 'axios';

const cusAxiosFERD = axios.create({});
const cancelToken = axios.CancelToken;
const source = cancelToken.source();
const cacheRequest = {};
// 需要处理竞态问题的 接口
const urls = ['/xxx'];
cusAxiosFERD.interceptors.request.use( (config) => {
  
  const curUrl = config.url;
  if(urls.some(u=>curUrl.indexOf(u) > -1 ) && config.headers.isLimit){
    cacheRequest[curUrl] && cacheRequest[curUrl]();

    config.cancelToken = new axios.CancelToken(function executor(c) {
      cacheRequest[curUrl]  = c;
    })
  }
  return config;
}
相关推荐
我是伪码农3 小时前
Vue 1.23
前端·javascript·vue.js
wqwqweee3 小时前
Flutter for OpenHarmony 看书管理记录App实战:搜索功能实现
开发语言·javascript·python·flutter·harmonyos
HIT_Weston5 小时前
107、【Ubuntu】【Hugo】搭建私人博客:模糊搜索 Fuse.js(三)
linux·javascript·ubuntu
henujolly8 小时前
ethers.js读取合约信息
开发语言·javascript·区块链
毕设源码-郭学长8 小时前
【开题答辩全过程】以 基于Web的高校课程目标达成度系统设计与实现为例,包含答辩的问题和答案
前端
wuhen_n9 小时前
高阶函数与泛型函数的类型体操
前端·javascript·typescript
POLITE39 小时前
Leetcode 437. 路径总和 III (Day 16)JavaScript
javascript·算法·leetcode
難釋懷10 小时前
解决状态登录刷新问题
java·开发语言·javascript
ヤ鬧鬧o.10 小时前
多彩背景切换演示
前端·css·html·html5
一起养小猫10 小时前
Flutter实战:从零实现俄罗斯方块(三)交互控制与事件处理
javascript·flutter·交互