美文网首页axios
axios 请求拦截 取消重复请求(多次重复异步,结束pendi

axios 请求拦截 取消重复请求(多次重复异步,结束pendi

作者: 小悟空大仙人 | 来源:发表于2019-11-14 14:53 被阅读0次

前端开发中,会涉及很多异步事件处理,页面展示的处理关系最密切的就是loading图层,但是loading交互在一些时候会不太友好,后端同学也不喜欢loading状态(后端同学:这不就是说我的接口返回慢嘛?我的锅!)
前端函数节流防抖也是一个解决方法,但是又有一个问题是,我们处理的是异步,只要有异步就会有等待,比如,防抖时间是1s,异步事件触发了两次,就需要最快2s完成,假设第一次异步3s返回,第二次异步0.5秒返回;那出现的情况就是,第一次触发的3s异步,1s内没有返回,1s后第二次触发异步,第一次的异步还没有返回,第二次的异步就就开始了,0.5秒后第二次异步返回了,但是最终结果响应的是第一次的异步。


axios取消重复请求.png

解决方案:利用axios可以很方便的取消重复请求的pending状态,结束重复请求,只让最后一次请求通过

官方文档:http://www.axios-js.com/zh-cn/docs/#%E5%8F%96%E6%B6%88

let pending = []; //声明一个数组用于存储每个请求的取消函数和axios标识
let cancelToken = axios.CancelToken;
let removePending = (config) => {
    console.log('pending',pending);
    for(let p in pending){
        if(pending[p].u === config.url.split('?')[0] + '&' + config.method) { 
        //当当前请求在数组中存在时执行函数体
            pending[p].f(); //执行取消操作
            pending.splice(p, 1); //数组移除当前请求
        }
    }
}
//请求拦截
service.interceptors.request.use(function(config) { 
    /*.....*/
  removePending(config); //在一个axios发送前执行一下取消操作
  config.cancelToken = new cancelToken((c)=>{
        // pending存放每一次请求的标识,一般是url + 参数名 + 请求方法,当然你可以自己定义
    pending.push({ u: config.url.split('?')[0] +'&' + config.method, f: c});//config.data为请求参数
  });
   /*.....*/

})
image.png

相关文章

  • axios 请求拦截 取消重复请求(多次重复异步,结束pendi

    前端开发中,会涉及很多异步事件处理,页面展示的处理关系最密切的就是loading图层,但是loading交互在一些...

  • Axios 取消重复请求

    有什么用? 当用户频繁点击在短时间内发送多个 ajax 请求,但是由于网络原因服务器数据无法及时响应返回,这时候,...

  • axios取消重复请求

    在开发中,经常会遇到接口重复请求导致的各种问题。 对于重复的get请求,会导致页面更新多次,发生页面抖动的现象,影...

  • axios取消重复请求

    当第一个axios发起连续请求的时候,这时候我们就需要取消第二、第三个请求,因为他们都是同一个请求发起。 来看一下...

  • axios之cancelToken取消多次重复请求

    一、我们为什么需要取消? 我们常见的业务场景有,用户频繁点击数据提交,用户频繁的切换数据量大的表格,在网络较差的环...

  • 重复点击,请求事件问题

    1.axios 原理,请求响应拦截重复请求 https://mp.weixin.qq.com/s/GtHBgzQ5...

  • Axios如何取消重复请求

    在 Web 项目开发过程中,我们经常会遇到重复请求的场景,如果系统不对重复的请求进行处理,则可能会导致系统出现各种...

  • Axios如何取消重复请求

    在实际开发中,我们需要对用户发起的重复请求进行拦截处理,比如用户快速点击提交按钮。 对于重复的 get 请求,会导...

  • axios重复请求处理 CancelToken 取消请求

    CancelToken 介绍 ​ axios中用于取消请求的方法 使用 可以使用 CancelToken.so...

  • axios 重复请求

    先贴上代码 参考:axios重复请求 只是修改了请求部分代码。有空可以看看参考链接。他里面的方法不太适合我现在的情况。

网友评论

    本文标题:axios 请求拦截 取消重复请求(多次重复异步,结束pendi

    本文链接:https://www.haomeiwen.com/subject/bzrrictx.html