封装axios并实现发送请求前如果有正在执行的请求就取消请求

1.新建封装文件,cancelAxios.js

import axios from "axios";
const newAxios = axios.create({
  baseURL: window.$serveHttp.BaseUrl,//自己的地址
});
const CancelToken = axios.CancelToken;
let cancel; //用于保存请求的函数
// 请求拦截器
newAxios.interceptors.request.use(
  (config) => {
    //在准备发请求前,取消未完成的请求,使得重复点击时,取消上次发送的请求
    if (typeof cancel === "function") {
      cancel();
    }
    //给config添加一个cancelToken的配置
    config.cancelToken = new CancelToken(function executor(c) {
      //c 是用于取消当前请求的函数
      // 保存取消函数,用于之后可能需要取消当前的请求
      cancel = c;
    });
    return config;
  },
  (error) => {
    console.log(error, "取消");
    return Promise.reject();
  }
);
// 响应拦截器
newAxios.interceptors.response.use(
  (response) => {
    cancel = null;
    return response;//成功回调
  },
  (error) => {
    console.log(error, "取消请求");
    return error;//取消回调
  }
);

// 导出自定义函数,参数对象结构赋值
export default ({ url, method = "GET", params, data, headers }) => {
  return newAxios({
    url,
    method: method,
    params: params,
    data: data,
    headers: headers,
  });
};

2.使用封装文件

import request from "../utils/cancelAxios";
// 接口
export const getGeoCodingAPI = (data) => {
  return request({
    url: "/******/*****",
    method: "post",
    headers: {
      "Content-Type": "application/json",
    },
    data:data,
  });
};

你可能感兴趣的:(javascript,前端,开发语言,vue.js)