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

Axios拦截器拒绝Promise未触发useMutation的isError设为true

问题根源

你的register函数是async函数,但内部没有返回Axios请求的Promise,导致React Query接收到的是一个已resolve的空Promise——不管后端返回成功还是错误,React Query都会判定请求成功,触发onSuccess。

修复步骤

1. 修正api.ts中的register函数

给API.post添加return,让函数把请求的Promise传递出去:

type registerParams = {
    email:string,
    password:string,
    confirmPassword:string
}
export const register = async (data: registerParams) => {
    // 关键:返回Axios请求的Promise
    return API.post("/auth/register", data)
}

2. 验证拦截器错误逻辑(可选)

你的Axios响应拦截器错误处理逻辑是正确的:返回Promise.reject({status, ...data})会让Promise进入rejected状态。修正register函数后,React Query就能捕获到这个rejected状态,自动将isError设为true,渲染错误提示。

3. 适配后端错误字段(可选)

如果后端返回的错误数据里没有message字段,需要调整错误提示的取值。比如后端返回{ error: "邮箱已存在" },则修改错误渲染部分:

{
    error?.error || "An error occured"
}
为什么之前代码不生效?

async函数如果没有显式return值,默认返回Promise.resolve(undefined)。你之前的register函数仅调用了API.post但没返回它,导致React Query的mutationFn拿到的是一个已resolve的空Promise,自然会走onSuccess逻辑,完全感知不到后端返回的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:45:54