let isRefreshing = false let refreshSubscribers = [] function onRefreshed(newToken) { refreshSubscribers.forEach(cb => cb(newToken)) refreshSubscribers = [] } function subscribeTokenRefresh(cb) { refreshSubscribers.push(cb) } /** * 刷新 Token 并重新请求 * @param {Object} originalRequest - 原始 axios 请求配置 * @param {AxiosInstance} instance - axios 实例 */ export async function handleTokenRefresh(originalRequest, instance) { if (isRefreshing) { return new Promise(resolve => { subscribeTokenRefresh(token => { originalRequest.headers.Authorization = `Bearer ${token}` resolve(instance(originalRequest)) }) }) } isRefreshing = true try { const res = await instance.post('/agentnew/refresh_token') const newToken = res.data localStorage.setItem('token', newToken) isRefreshing = false onRefreshed(newToken) originalRequest.headers.Authorization = `Bearer ${newToken}` return instance(originalRequest) } catch (err) { isRefreshing = false refreshSubscribers = [] localStorage.removeItem('token') window.location.href = process.env.VUE_APP_BASE_API; return Promise.reject(err) } }