gaoluyang
4 天以前 cd8b52bdf89a4d1101f72e0ece9f4df22a3d3f7a
src/packages/effects/request/src/request-client/preset-interceptors.ts
@@ -1,8 +1,8 @@
import type { RequestClient } from './request-client';
import type { MakeErrorMessageFn, ResponseInterceptorConfig } from './types';
import { $t } from '..\..\..\..\locales\src';
import { isFunction } from '..\..\..\..\utils\src';
import { $t } from '../../../../locales/src';
import { isFunction } from '../../../../utils/src';
import axios from 'axios';
@@ -52,7 +52,7 @@
  formatToken,
}: {
  client: RequestClient;
  doReAuthenticate: () => Promise<void>;
  doReAuthenticate: (error?: any) => Promise<void>;
  doRefreshToken: () => Promise<string>;
  enableRefreshToken: boolean;
  formatToken: (token: string) => null | string;
@@ -67,13 +67,14 @@
      // 判断是否启用了 refreshToken 功能
      // 如果没有启用或者已经是重试请求了,直接跳转到重新登录
      if (!enableRefreshToken || config.__isRetryRequest) {
        await doReAuthenticate();
        await doReAuthenticate(error);
        throw error;
      }
      // 如果正在刷新 token,则将请求加入队列,等待刷新完成
      if (client.isRefreshing) {
        return new Promise((resolve) => {
          client.refreshTokenQueue.push((newToken: string) => {
        return new Promise((resolve, reject) => {
          client.refreshTokenQueue.push((newToken: string, refreshError?: unknown) => {
            if (refreshError) { reject(refreshError); return; }
            config.headers.Authorization = formatToken(newToken);
            resolve(client.request(config.url, { ...config }));
          });
@@ -96,10 +97,10 @@
        return client.request(error.config.url, { ...error.config });
      } catch (refreshError) {
        // 如果刷新 token 失败,处理错误(如强制登出或跳转登录页面)
        client.refreshTokenQueue.forEach((callback) => callback(''));
        client.refreshTokenQueue.forEach((callback) => callback('', refreshError));
        client.refreshTokenQueue = [];
        console.error('Refresh token failed, please login again.');
        await doReAuthenticate();
        await doReAuthenticate(error);
        throw refreshError;
      } finally {