uni.request 取消重复请求 不同接口相互取消

170 阅读1分钟
import BASEURL from "../config/env";
let controllerList = [];
let cancelOtherRequest = [];
export function doRequest(method, path, data, header = {}, needCancel = false) {
  if (needCancel) {
    cancelOtherRequest.forEach((item) => {
      item.abort();
      cancelOtherRequest = [];
    });
  }
  controllerList.forEach((item) => {
    if (item.url === path) {
      item.conT.abort();
      controllerList = controllerList.filter((item) => item.url !== path);
    }
  });
  
  return new Promise((resolve, reject) => {
    const requsetTask = uni.request({
      timeout: 1000 * 60 * 10,
      method,
      url: BASEURL + path,
      data,
      header,
      success: function (result) {
        resolve(result);
      },
      fail: function (e) {
        reject(e);
      },
    });
    if (needCancel) {
      cancelOtherRequest.push(requsetTask);
    }
    controllerList.push({ url: path, conT: requsetTask });
  });
}