如何在RTK Query中仅针对401错误取消maxRetries重试
解决RTK Query遇到401错误时终止重试的问题
核心思路是利用RTK retry 函数自带的 retryCondition 配置项,自定义重试判断逻辑——当检测到401状态码时直接终止重试,其他情况保留原有重试规则。
修改后的完整代码如下:
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, // 自定义重试判断条件 retryCondition: (error) => { // 遇到401直接返回false,终止重试 if (error.status === 401) { return false; } // 其他情况沿用RTK默认的重试逻辑(网络错误、5xx状态码时重试) return retry.defaultRetryCondition(error); } });
关键说明
retryCondition是每次重试前都会触发的判断函数,返回true则继续重试,返回false则立即终止流程,比中间件更早介入,完美解决你之前遇到的“中间件只在所有重试完成后触发”的问题。- 调用
retry.defaultRetryCondition(error)可以保留RTK默认的重试规则,不用自己重新写网络错误、服务器错误的判断逻辑。
内容的提问来源于stack exchange,提问作者Awantha Irushan
相关产品推荐
相关产品推荐

