axios cancelToken
import axios from "axios";
const pendingRequest = new Map();
function generateReqKey(config) {
const { method, url } = config;
return [method, url].join("&");
}
export function removePendingRequest(config) {
const requestKey = generateReqKey(config);
if (pendingRequest.has(requestKey)) {
pendingRequest.delete(requestKey);
}
}
function cancelRequest(config) {
const requestKey = generateReqKey(config);
if (pendingRequest.has(requestKey)) {
const cancel = pendingRequest.get(requestKey);
cancel(requestKey);
pendingRequest.delete(requestKey);
}
}
export function addPendingRequest(config) {
cancelRequest(config);
const requestKey = generateReqKey(config);
config.cancelToken =
new axios.CancelToken((cancel) => {
if (!pendingRequest.has(requestKey)) {
pendingRequest.set(requestKey, cancel);
}
});
}