vue axios请求频繁时取消上一次请求的方法


Posted in Javascript onNovember 10, 2018

一、前言

在项目中经常有一些场景会连续发送多个请求,而异步会导致最后得到的结果不是我们想要的,并且对性能也有非常大的影响。例如一个搜索框,每输入一个字符都要发送一次请求,但输入过快的时候其实前面的请求并没有必要真的发送出去,这时候就需要在发送新请求的时候直接取消上一次请求。

二、代码

<script>
import axios from 'axios'
import qs from 'qs'

export default {
  methods: {
    request(keyword) {
      var CancelToken = axios.CancelToken
      var source = CancelToken.source()
       
      // 取消上一次请求
      this.cancelRequest();
      
      axios.post(url, qs.stringify({kw:keyword}), {
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Accept': 'application/json'
        },
        cancelToken: new axios.CancelToken(function executor(c) {
          that.source = c;
        })
      }).then((res) => {
        // 在这里处理得到的数据
        ...
      }).catch((err) => {
        if (axios.isCancel(err)) {
          console.log('Rquest canceled', err.message); //请求如果被取消,这里是返回取消的message
        } else {
          //handle error
          console.log(err);
        }
      })
    },
    cancelRequest(){
      if(typeof this.source ==='function'){
        this.source('终止请求')
      }
    },
  }
}
</script>

三、结语

这样就可以成功取消上一次请求啦!以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在视频前插入广告
Nov 20 Javascript
JavaScript 事件冒泡简介及应用
Jan 11 Javascript
详解JavaScript的策略模式编程
Jun 24 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
jQuery内容筛选选择器实例代码
Feb 06 Javascript
jQuery+ajax实现局部刷新的两种方法
Jun 08 jQuery
关于webpack代码拆分的解析
Jul 20 Javascript
Vue.js实现网格列表布局转换方法
Aug 25 Javascript
从零开始搭建webpack+react开发环境的详细步骤
May 18 Javascript
了解javascript中的Dom操作
May 27 Javascript
详解element-ui动态限定的日期范围选择器代码片段
Jul 03 Javascript
详解Typescript里的This的使用方法
Jan 08 Javascript
微信小程序实现跑马灯效果
Oct 21 #Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 #Javascript
vue.js自定义组件directives的实例代码
Nov 09 #Javascript
详解处理Vue单页面应用SEO的另一种思路
Nov 09 #Javascript
webpack 静态资源集中输出的方法示例
Nov 09 #Javascript
vue中如何去掉空格的方法实现
Nov 09 #Javascript
Vue press 支持图片放大功能的实例代码
Nov 09 #Javascript
You might like
PHP中的日期加减方法示例
2014/08/21 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
django使用图片延时加载引起后台404错误
2017/04/18 Python
Django验证码的生成与使用示例
2017/05/20 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
Python模块的加载讲解
2019/01/15 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
超市仓管员岗位职责
2014/04/07 职场文书
敬老院标语
2014/06/27 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python