终止请求:终止axios,JQ请求方法

终止请求:axios,JQ方法

背景:项目需求中经常遇到点击操作,会频繁调用接口服务,浪费资源。有时更是会出现异步,导致结果出错,产生bug,如何让点击时终止之前所有请求,就是今天学习主要内容:

连续点击优化前:
在这里插入图片描述

连续点击优化后:
在这里插入图片描述

终止axios请求:
api.js增加配置(request.cancelToken

import axios from 'axios'
import Vue from 'vue'
// 构建axios实例
const instance = axios.create({
  // timeout: 5000,    //设置请求超时时间   5s
  // baseURL: '/api',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
  },
})
// 将正在发起的请求存到数组中
let reqList = (Vue.prototype.pending = []);
const cancelToken = axios.CancelToken;
//请求拦截器
instance.interceptors.request.use(
  request => {
    const contentType = request.headers['Content-Type']
    if (contentType) {
      if (contentType.split(';')[0] === 'application/x-www-form-urlencoded') {
        request.data = trequest.data
        request.cancelToken = new cancelToken((c) => {
          // 这里的C是一个函数,用于终止请求的作用
          reqList.push({ f: c });
        });
      }
    }
    return request
  },
  error => {
    return Promise.reject(error)
  }
)
export default instance

之后在每次需要终止请求前调用次方法即可:

    removePending (errorMessage) {
      const errorMsg = errorMessage || "cancelRequest----终止请求";
      //终止pending中的请求:
      for (let i = this.pending.length - 1; i >= 0; i--) {
        this.pending[i].f(errorMsg); //执行取消操作
        this.pending.splice(i, 1); //把这条记录从数组中移除
      }
    },

终止JQ请求:
利用 abort()后,ajax请求立即停止,终止请求

      let url = 'http://xxx.xxx.xx:2000/get_station_info/'
      let param = { "station_type": "160" }
      let ajaxPost = $.post(url, {
        para: JSON.stringify(param)
      })
      ajaxPost.abort();

使用这种方法若要终止多组请求,可将需要终止的请求推到数据,需要时,遍历阻止即可

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值