我写了这样的基本查询,并添加了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错误?

推荐答案

你可以bail out of retries.创建一个自定义基本查询函数,该函数判断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 },
);

Javascript相关问答推荐

用户单击仅在JavaScript中传递一次以及其他行为

使用useup时,React-Redux无法找到Redux上下文值

node TS:JWT令牌签名以验证客户端和后台问题之间的身份验证

GrapeJS -如何保存和加载自定义页面

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

将状态向下传递给映射的子元素

我应该绑定不影响状态的函数吗?'

Msgraph用户邀请自定义邮箱模板

在网页上添加谷歌亵渎词

将内容大小设置为剩余可用空间,但如果需要,可在div上显示滚动条

在Java中寻找三次Bezier曲线上的点及其Angular

400 bad request error posting through node-fetch

如何在Java脚本中对列表中的特定元素进行排序?

如何在Java脚本中对数据进行签名,并在PHP中验证签名?

postman 预请求中的hmac/sha256内标识-从js示例转换

Jexl to LowerCase()和Replace()

我不知道如何纠正这一点.

Firebase函数中的FireStore WHERE子句无法执行

暂停后只有一次旋转JS

与find()方法一起使用时,Mongoose中的$or运算符没有提供所有必需的数据