仅针对 RTK 查询中未经授权的错误覆盖 maxRetries

问题描述 投票:0回答:1

我已经编写了这样的基本查询,并添加了

maxRetries
计数为 3。

export const baseQuery = retry(fetchBaseQuery({
  timeout: 5000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8',
    'Access-Control-Allow-Origin': '*'
  },
  prepareHeaders: (headers) => {
    if (!headers.has('Accept-Language') && accessToken) {
      headers.set('Accept-Language', i18n.language || 'en');
    }
    return headers;
  },
}), { maxRetries: 3 });

我不需要重试未经授权的错误。当我收到 401 状态时,我需要停止重试。我怎样才能做到这一点?

我想使用 RTK 中间件来做到这一点,但在所有重试后只有中间件被触发。那么有没有什么方法可以仅在收到 HTTP 状态 401 错误时停止重试?

javascript reactjs redux-toolkit http-status-code-401 rtk-query
1个回答
0
投票

您可以退出重试。创建一个自定义基本查询函数,用于检查

fetchBaseQuery
结果状态并抢占重试逻辑失败。

示例:

export const baseQuery = retry(
  async (args, api, extraOptions) => {
    const result = await fetchBaseQuery({
      timeout: 5000,
      headers: {
        'Content-Type': 'application/json;charset=utf-8',
        'Access-Control-Allow-Origin': '*'
      },
      prepareHeaders: (headers) => {
        if (!headers.has('Accept-Language') && accessToken) {
          headers.set('Accept-Language', i18n.language || 'en');
        }
        return headers;
      },
    })(args, api, extraOptions);

    if (result.error?.status === 401) {
      retry.fail(result.error);
    }

    return result;
  },
  { maxRetries: 3 },
);
© www.soinside.com 2019 - 2024. All rights reserved.