当前位置:首页 » 《随便一记》 » 正文

取消当前请求-vue_beichengliulixue的博客

16 人参与  2021年11月22日 16:03  分类 : 《随便一记》  评论

点击全文阅读


在某些特殊的场景业务下,需要手动停止未完成的Ajax请求,或在快速切换页面时,停止上一页面未完成的请求,减少资源浪费

实现目标:

  • 封装全局的变量及方法
  • 通过全局方法的引入,在页面直接调用该方法取消当前为完成的请求
  • 无需引入,在使用vue的页面可直接使用

实现方式

    • 新建JS文件,单独封装方法
  • 在main.js中引入该JS文件,进行全局注入 (或者直接在main.js中注入方法)
  • 在单个请求中单独添加cancelToken标识
  • 全部请求(axios封装位置)发起时添加cancelToken标识
  • 调用全局方法停止当前正在进行的Ajax请求

1、在main.js中注入方法

/**
 *取消正在进行中请求
 * cancelList设置批量取消的接口,/**代表符合该规则的全部接口
 * * 全局方法$cancelRequest可取消当前cancelList中的正在请求requset
 * * 全局方法$cancelRequest("url")可控制取消单个请求
 * */
const cancelDefaltList = ['/user/name','/org/number/**']
Vue.prototype.$currentHttpRequestList = new Map();
Vue.prototype.$cancelRequest = function(key) {
  if (key) {
    if (key.indexOf('/**') > -1) {
      Vue.prototype.$currentHttpRequestList.forEach((item, key) => {
        key.indexOf(key.split('/**')[0]) > -1 && item('Operation canceled by the user.');
      });
    } else {
      Vue.prototype.$currentHttpRequestList.get(key) && Vue.prototype.$currentHttpRequestList.get(key)('Operation canceled by the user.');
    }
  } else {
    cancelList.forEach(eachWite => {
      Vue.prototype.$currentHttpRequestList.forEach((item, key) => {
      key.indexOf(eachWite.split('/**')[0]) > -1 && item('Operation canceled by the user.')
      })
    })
 }
};

2、 在在请求拦截器中添加(也可以按照需求在某些请求中单独添加)cancelToken标识

axios.interceptors.request.use(
  function(config) {
    const CancelToken = axios.CancelToken;
    var token = getToken();
    config.headers['Content-Type'] = 'application/json; charset=UTF-8';
    config.headers.Authorization = 'bearer ' + token; // 设置请求头
    //添加cancelToken标识
    config.cancelToken = new CancelToken(function executor(c) {
      Vue.prototype.$currentHttpRequestList.set(config.url, c);
    });
    return config;
  },
  function(err) {
    if (err && err.message === 'Operation canceld by the user.') {
      console.log(err, 'errorcancel');
      return;
    }
    return Promise.reject(err);
  }
);

3、按照需求(业务逻辑)调用全局方法停止当前正在进行的Ajax请求

<template>
</template>

<script>
export default {
  name: 'test',
  data() {
    return {};
  },
  created(){
      //实际使用位置需根据具体的业务场景需求而定,此处放在created中只是个示例
      this.$cancelRequest('/user/name/**');//取消以‘/user/name/’开头的正在进行中的请求
      this.$cancelRequest('/user/age');//取消正在进行中的请求‘/user/age/’
      this.$cancelRequest();  //取消cancelDefaltList设置的全部正在进行中的请求
  },
  methods: {}

点击全文阅读


本文链接:http://zhangshiyu.com/post/31188.html

请求  方法  全局  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 热文推荐一见钟情的两情相悦小说(夏颜谭正东)前传列表
  • 我抛弃赘婿去冲喜,黑道大佬却发疯了许棠傅明礼许晴晴完本_我抛弃赘婿去冲喜,黑道大佬却发疯了(许棠傅明礼许晴晴)
  • 穿越七零:大佬,你的孩子重生了后续+番外_颜希姜建军全文阅读_小说后续在线阅读_无删减免费完结_
  • 我换战队后,嫌我是草包大小姐的搭档悔疯了小众冷门_苏媛林夕林小姐完整文本_小说后续在线阅读_无删减免费完结_
  • 我抛弃赘婿去冲喜,黑道大佬却发疯了节选(许棠傅明礼)_我抛弃赘婿去冲喜,黑道大佬却发疯了节选许棠傅明礼
  • (野渡无人春迟归)野渡无人春迟归小说(顾清许岁宁)整书在线无广告高口碑小说
  • 竹断相思情不知彩蛋(林逸舟陆清晚)全书在线下载阅读完美终章小说大结局
  • 全文我抛弃赘婿去冲喜,黑道大佬却发疯了结局+番外+续集(许棠傅明礼)列表_全文我抛弃赘婿去冲喜,黑道大佬却发疯了结局+番外+续集
  • 放弃白眼狼父子后,我暴富了阅读_霍元峰戚茗瑶霍砚白独家番外_小说后续在线阅读_无删减免费完结_
  • 重回八零,改嫁纨绔子弟后前夫悔疯了免费品鉴_小说后续在线阅读_无删减免费完结_
  • 南枝意周随小说番外+结局(被迫冥婚,糙汉刑警撬开棺材救我)小说在线阅读
  • (头条)那夜后,疯批大佬跪哄娇软小可怜小说(厉璟渊沈听榆)整本免费版阅读无广告(那夜后,疯批大佬跪哄娇软小可怜)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1