From d1355aea95e8ca90aa8bc88ad1f34f76e6574cea Mon Sep 17 00:00:00 2001 From: 17610087571 <7822642+xiaoranzife@user.noreply.gitee.com> Date: Sun, 3 Mar 2024 05:23:07 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E5=85=AC=E5=85=B1?= =?UTF-8?q?=E7=9A=84cancel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 17610087571 <7822642+xiaoranzife@user.noreply.gitee.com> --- admin/src/utils/request/cancel.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/admin/src/utils/request/cancel.ts b/admin/src/utils/request/cancel.ts index b092e1d4d..00edb5d45 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) } } } -- Gitee