diff --git a/admin/src/utils/request/cancel.ts b/admin/src/utils/request/cancel.ts index b092e1d4d4876ceef8800410360ef970a22cff34..00edb5d45e3adedb1a1be2b4ddcfbc4095ac2ff7 100644 --- a/admin/src/utils/request/cancel.ts +++ b/admin/src/utils/request/cancel.ts @@ -2,6 +2,12 @@ import axios, { type AxiosRequestConfig, type Canceler } from 'axios' const cancelerMap = new Map() +// 获取一个唯一的请求键,它由请求的 URL 和参数组成 +function getRequestKey(config: AxiosRequestConfig): string { + const { url, method, params, data } = config + return [method, url, JSON.stringify(params), JSON.stringify(data)].join("&") +} + export class AxiosCancel { private static instance?: AxiosCancel @@ -9,19 +15,19 @@ export class AxiosCancel { return this.instance ?? (this.instance = new AxiosCancel()) } add(config: AxiosRequestConfig) { - const url = config.url! - this.remove(url) + const requestKey = getRequestKey(config) + this.remove(requestKey) config.cancelToken = new axios.CancelToken((cancel) => { - if (!cancelerMap.has(url)) { - cancelerMap.set(url, cancel) + if (!cancelerMap.has(requestKey)) { + cancelerMap.set(requestKey, cancel) } }) } - remove(url: string) { - if (cancelerMap.has(url)) { - const cancel = cancelerMap.get(url) - cancel && cancel(url) - cancelerMap.delete(url) + remove(requestKey: string) { + if (cancelerMap.has(requestKey)) { + const cancel = cancelerMap.get(requestKey) + cancel && cancel(requestKey) + cancelerMap.delete(requestKey) } } }