美文网首页
axios中取消请求及阻止重复请求的方法

axios中取消请求及阻止重复请求的方法

作者: 未来好好生活 | 来源:发表于2020-05-10 20:46 被阅读0次

前言:

在实际项目中,我们可能需要对请求进行“防抖”处理。这里主要是为了阻止用户在某些情况下短时间内重复点击某个按钮,导致前端向后端重复发送多次请求。这里我列举两种比较常见的实际情况:
1.PC端 - 用户双击搜索按钮,可能会触发两次搜索请求
2.移动端 - 因移动端没有点击延迟,所以极易造成误操作或多操作,造成请求重发

核心——

  • 在Axios中取消请求最核心的方法是CanelToken。在官网文档中有写到两种方法使用CancelToken,这里简单粘贴出来,并增加了注释

方法1:

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

axios.get('/user/12345', {
  // 必须对请求进行cancelToken设置
  cancelToken: source.token
}).catch(function (thrown) {
  // 如果请求被取消则进入该方法判断
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // handle error
  }
});

// 取消上面的请求
// source.cancel('messge') message为可选项,必须为String
source.cancel('Operation canceled by the user.');

方法2:

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  // 在options中直接创建一个cancelToken对象
  cancelToken: new CancelToken(function executor(c) {
    cancel = c;
  })
});

// 取消上面的请求
cancel();

app项目中搜索功能请求的拦截

<script>
export default {
    name : 'Search',
    data(){
        return {
            message : '',
            moviesList : []
        }
    },
    methods : {
        //首先在methods中定义cancelRequest()方法
        cancelRequest(){
            if(typeof this.source ==='function'){
                this.source('终止请求')
            }
        }
    },
       //用watch去监听message输入框
    watch : {
        message(newVal){
            var that = this;
            var cityId = this.$store.state.city.id;
            this.cancelRequest();
            this.axios.get('/api/searchList? cityId='+ cityId +'&kw='+newVal,{
                cancelToken: new this.axios.CancelToken(function(c){
                    that.source = c;
                })
            }).then((res)=>{
                var msg = res.data.msg;
                var movies = res.data.data.movies;
                if(msg && movies){
                    this.moviesList = res.data.data.movies.list;
                }
            }).catch((err) => {
                if (this.axios.isCancel(err)) {
                    console.log('Rquest canceled', err.message); //请求如果被取消,这里是返回取消的message
                } else {
                    //handle error
                    console.log(err);
                }
            });
        }
    }
}
</script>

相关文章

  • axios中取消请求及阻止重复请求的方法

    前言: 在实际项目中,我们可能需要对请求进行“防抖”处理。这里主要是为了阻止用户在某些情况下短时间内重复点击某个按...

  • axios如何取消接口请求

    vue项目,如何在axios中取消已经发送的请求呢? 原生js的abort()这个方法 在axios中取消接口请求...

  • Axios 取消重复请求

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

  • axios取消重复请求

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

  • axios取消重复请求

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

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

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

  • Axios如何取消重复请求

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

  • Axios如何取消重复请求

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

  • Axios中取消请求

    在平时的开发过程中,我们会经常遇到菜单切换的问题,在一些切换频率较低的情况下,在切换到另一个页面的时候,上一个页面...

  • axios中get请求与post请求的简单函数封装,axios全

    axios中get请求与post请求的简单函数封装,axios全局请求参数设置,请求及返回拦截器 一、 https...

网友评论

      本文标题:axios中取消请求及阻止重复请求的方法

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