vue+axios 取消网络请求

核心代码

api.js文件

import request from '@/utils/request'
import axios from 'axios'
const CancelToken = axios.CancelToken
// 额外传入一个 that
export function getData(data, that) {
  return request({
    url: '/test/list',
    method: 'post',
    data: data,
    // 关键代码 cancelToken
    cancelToken: new CancelToken((c) => {
      that.cancel = c
    })
  })
}

组件使用

// 传参的时候,需要额外传一个this
getData(params, this)
	.then((res) => {})
	.catch((err) => {})
	.finally(() => {})
// 在需要取消的位置执行以下代码即可(组件内调用)
this.cancel()

注意:调用this.cancel()取消请求的时候,函数会把catch和finally走完

附带一个例子

api.js文件

import request from '@/utils/video'
import axios from 'axios'
const CancelToken = axios.CancelToken

export function startPlayback(data,that) {
  return request({
    method: 'get',
    params: data,
    // 关键代码 cancelToken
    cancelToken: new CancelToken((c) => {
      that.cancel = c
    })
  })
}

组件使用

data(){
	isFirst:true,//是否为第一次请求
	loadingKey:"",//最新一次请求的标识
	videoBoxLoading:"",//盒子loading
}
getStartPlayback(params) {
  this.videoBoxLoading = true;
  this.playBackData = {};
  if (!this.isFirst) {//如果不是第一次,就取消请求(即取消上一次的请求,再执行新的请求)
    this.cancel();
  }
  //设置唯一标识 标记最后(最新)的一次请求
  this.loadingKey = params.startTime + params.tag + "";
  this.isFirst = false;//调用后 标记不是第一次请求了
  startPlayback(params, this)
    .then(res => {
    })
    .finally(() => {
      if (this.loadingKey == params.startTime + params.tag + "") {
        // 如果是最新的请求,才执行该操作
        this.videoBoxLoading = false;
      }
    });
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值