我已经编写了这样的基本查询,并添加了
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 错误时停止重试?
您可以退出重试。创建一个自定义基本查询函数,用于检查
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 },
);