我尝试在 Axios 中取消重复请求,但它可能仍会发送重复请求。
import type { AxiosRequestConfig } from 'axios';
export default class CancelRequest {
pendingRequestList: Map<any, any>;
constructor() {
this.pendingRequestList = new Map();
}
addPendingRequest = (config: AxiosRequestConfig) => {
const { method, url, params, data } = config;
const controller = new AbortController();
config.signal = controller.signal;
const uniqueKey = [method, url, JSON.stringify(params), JSON.stringify(data)].join('&');
this.pendingRequestList.set(uniqueKey, controller);
};
removePendingRequest(config: AxiosRequestConfig) {
const { method, url, params, data } = config;
const uniqueKey = [method, url, JSON.stringify(params), JSON.stringify(data)].join('&');
if (this.pendingRequestList.has(uniqueKey)) {
this.pendingRequestList.get(uniqueKey).abort();
this.pendingRequestList.delete(uniqueKey);
}
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.