@bj-ui/bj-authorization
Version:
星云系统登录通用模块
52 lines (45 loc) • 1.31 kB
JavaScript
/**
*
* @description:【service】层相关工具类方法
* @author:翟磊
* @date:2022-02-15
*
**/
import Qs from "qs";
// 用于根据当前请求的信息,生成请求 Key
function generateReqKey(config) {
const { method, url, params, data } = config;
return [method, url, Qs.stringify(params), Qs.stringify(data)].join("&");
}
//用于存储当前请求信息
const pendingRequest = new Map();
function addPendingRequest(config, axiosInstance) {
const requestKey = generateReqKey(config);
config.cancelToken =
config.cancelToken ||
new axiosInstance.CancelToken((cancel) => {
if (!pendingRequest.has(requestKey)) {
pendingRequest.set(requestKey, cancel);
}
});
}
//检查是否存在重复请求,若存在则取消已发的请求
function removePendingRequest(config) {
const requestKey = generateReqKey(config);
if (pendingRequest.has(requestKey)) {
cancelRequest(config);
pendingRequest.delete(requestKey);
}
}
// 取消请求
function cancelRequest(config) {
const requestKey = generateReqKey(config);
const cancelToken = pendingRequest.get(requestKey);
cancelToken(requestKey);
}
export {
generateReqKey,
addPendingRequest,
removePendingRequest,
cancelRequest,
};