云
18 小时以前 c2e8526f8f857be5e3a8c6f2b39c5efd424de33e
src/packages/effects/request/src/request-client/preset-interceptors.ts
@@ -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 {