如何取消axios重复请求

  1. 首先我们要知道,如何取消请求:

Asios是一个基于Promise的http客户端,同时支持浏览器的Node.js环境

是一个有效的HTTP客户端,被广泛的应用在大量的Web项目中,对于浏览器环境来说

Axios底层是利用XMLHttpRequest对象来发起HTTP请求,如果要取消请求的话

我们可以通过调用XMLHttpRequest对象上的abort方法来取消请求

具体代码如示:

let xhr = new XMLHttpRequest();
xhr.open("GET","https://developer.mozilla.org/",true);
xhr.send();
setTimeout(()=> xhr.abort(),300);

而对于Axios来说我们可以通过Axios内部提供的CancelToken来取消请求

const CanceToken = axios.CancelToken;
const souce = CancelToken.source();

axios.post('/user/12345',{
   name:'semlinker'
},{
    cancelToken: souce.token
}) 

source.cancel('Operation canceled by the user') //取消请求,参数是可选的

此外 也可以通过调用CancelToken的构造函数来创建 CancelToken

具体代码如下:

现在我们已经知道在Axios中如何CancelToken来取消请求了

  1. 判断如何取消重复请求

当请求方式 请求URL地址和请求参数都一样时,我们就可以认为请求是一样的

因此在每次发送i请求时,我们可以根据当前请求的请求方式,请求url和请求参数来生成一个唯一的key

同时为每个请求创建一个专属的CancelToken,然后把key和cancel函数以键值对的形式保存到Map对象中,使用Map的好处是可以快速的判断是否有重复的请求。

具体代码如下:

出现重复请求的时候,我们就可以使用cancel函数来取消前面已经发出的请求,在取消请求之后

我们还需要把取消的请求从pendingRequest中移除。

现在我们已经知道如何取消请求和如何判断重复请求,下面为您来介绍如何取消重复请求

因为我们需要对所以的请求都进行处理,所以我们可以考虑使用Axios的拦截器机制来实现取消重复请求的功能。

Axios为开发者提供了请求拦截器和响应拦截器,作用如下:

请求拦截器:该类拦截器的作用是在请求发送前统一指向某些操作。

比如在请求头中添加token字段

响应拦截器:该类拦截器的作用是在接收到服务器响应后统一执行某些操作。

比如发现响应状态为401时,自动跳转为登录页。

在配置请求拦截器和响应拦截器前先来定义3个辅助函数

第一个:generateReqkey

用于根据当前请求的信息 生成请求key

第二个:addPendingRequest

用于把当前请求信息添加到pendingRequest对象中

第三个:removeRendingRequest

检查是否存在重复请求,若存在则取消已发的请求

请求拦截器如图代码:

响应拦截器如图代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值