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

如何在react-query中处理错误且不触发unhandledrejection事件

如何让useMutation的onError捕获异常而不触发window的unhandledrejection事件

问题出在你给mutationFn传值的方式上——你直接写了foo(),这会在组件渲染时立即执行foo函数,而不是把foo作为mutation触发时要执行的函数传给useMutation。这种情况下,foo抛出的异常没有被useMutation的内部异常处理机制包裹,自然会冒泡到全局,触发unhandledrejection事件。

解决方法很简单,把mutationFn改成传递函数引用,而不是执行结果:

const mutation = useMutation({
   // 去掉括号,传递foo函数本身
   mutationFn: foo,
   onError: () => {
      console.log("error caught by onError");
   }
})

如果你的foo需要传递参数,可以用箭头函数包裹:

const mutation = useMutation({
   mutationFn: () => foo(yourParams),
   onError: () => {
      console.log("error caught by onError");
   }
})

这样修改后,useMutation会在触发mutation时才执行foo,并且内部会自动捕获foo抛出的所有同步异常和Promise拒绝,通过onError回调处理,不会让未处理的拒绝冒泡到全局,也就不会触发window的unhandledrejection事件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:54:55