You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RTK Query+React中已处理请求仍报控制台401错误,如何解决?

问题:RTK Query错误处理后控制台仍输出401错误

在使用RTK Query结合React开发时,编写了如下错误处理函数:

export const onAuthQueryStartedErrorToast = async (
  _: any,
  { queryFulfilled }: any,
) => {
  try {
    await queryFulfilled;
  } catch (error) {
    const isError = error as AuthErrorType;

    if (isError.error.data) {
      toast.warn(defineMessage(isError.error.data.message));
    } else {
      toast.warn("some error occured");
    }
  }
};

并在接口端点中配置了该处理函数:

export const AuthService = baseApi.injectEndpoints({
  endpoints: (builder) => {
    return {
      authMe: builder.query<AuthMeResponseType, void>({
        query: () => ({
          url: "v1/auth/me",
          method: "GET",
        }),
        onQueryStarted: onAuthQueryStartedErrorToast,
        providesTags: ["Auth"],
      }),
      // 其他端点...
    };
  },
});

目前错误提示功能正常,能弹出对应的toast,但控制台仍会输出401错误。看起来错误在处理函数执行前就被记录到控制台了,请问该如何消除这个控制台错误?


解决方案

控制台输出401错误是因为RTK Query默认会将HTTP错误(如401)记录到控制台,即使你在onQueryStarted中捕获了错误。可以通过以下方式解决:

1. 单个端点配置errorPolicy

在目标端点中添加errorPolicy: 'ignore',RTK Query将不会把错误存入状态、不会触发全局onError钩子,也不会在控制台打印该错误,但不影响你在onQueryStarted中自定义的toast提示逻辑:

authMe: builder.query<AuthMeResponseType, void>({
  query: () => ({
    url: "v1/auth/me",
    method: "GET",
  }),
  onQueryStarted: onAuthQueryStartedErrorToast,
  providesTags: ["Auth"],
  errorPolicy: 'ignore' // 添加此行配置
}),

2. 全局配置errorPolicy

如果希望所有端点都应用该规则,可在创建baseApi时全局设置:

const baseApi = createApi({
  baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
  endpoints: () => ({}),
  errorPolicy: 'ignore' // 全局生效的错误策略
});

关于errorPolicy的可选值说明

  • 'none'(默认):错误会存入状态、触发onError钩子,并打印到控制台
  • 'ignore':不存入状态、不触发onError、不打印控制台,但onQueryStarted的queryFulfilled仍能捕获错误
  • 'all':错误会存入状态,但不会触发onError和控制台打印

结合你的需求,'ignore'是最适配的选择,既保留自定义错误处理,又消除了控制台冗余输出。

内容的提问来源于stack exchange,提问作者Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:42:45