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

react-query中useMutation错误触发onSuccess而非onError的问题

问题原因与解决方法

问题根源

你的Axios请求封装里,onError函数捕获错误后直接返回了错误对象,这会改变Promise的状态:

const onError = error => {
    console.error('AXIOS !!!!!  Request Failed:', error.config.url);
    return error // 这里是核心问题:返回错误会让rejected的Promise转为resolved
};

Promise的运行机制是:catch块如果返回一个值(哪怕是错误对象),整个Promise链会变成**已兑现(resolved)状态。而React Query的useMutation仅在传入的函数返回的Promise被拒绝(rejected)**时,才会触发onError回调。所以即便Axios捕获到了错误,因为你返回了错误对象,Promise状态变为resolved,useMutation就会误判为请求成功,触发onSuccess。

解决方法

修改Axios的onError函数,将返回错误改为重新抛出错误,让Promise保持rejected状态:

const onError = error => {
    console.error('AXIOS !!!!!  Request Failed:', error.config.url);
    throw error; // 重新抛出错误,维持Promise的rejected状态
};

这样当请求失败时,Axios返回的Promise会保持拒绝状态,useMutation就能正确识别错误并触发onError回调。

如果需要在Axios层面做统一错误处理(比如401权限失效跳转),处理完成后仍要抛出错误,确保Promise的拒绝状态不被覆盖,上层的useMutation才能正常感知错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:12:22