axios 取消重复请求

61 阅读1分钟
import instance from "./axios";
let controllerList = [];
const request = ({ method = "get", url, data, config }) => {
  method = method.toLowerCase();
  controllerList.forEach((item) => {
    if (item.url === url) {
      item.conT.abort();
      controllerList = controllerList.filter((item) => item.url !== url);
    }
  });
  let controller = new AbortController();
  controllerList.push({ url, conT: controller });
  config = { ...config, signal: controller.signal };
  if (method === "post") {
    return instance.post(url, data, config).then((res) => {
      controllerList = controllerList.filter((item) => item.url !== url);
      return res;
    });
  } else if (method === "get") {
    return instance
      .get(url, {
        params: data,
        ...config,
      })
      .then((res) => {
        controllerList = controllerList.filter((item) => item.url !== url);
        return res;
      });
};
export default request;