即使出现错误,onCompleted 的 useMutation 也会被执行

Posted

技术标签:

【中文标题】即使出现错误,onCompleted 的 useMutation 也会被执行【英文标题】:onCompleted of useMutation get executed even on error 【发布时间】:2021-01-26 12:55:26 【问题描述】:

当我使用 useMutation 挂钩并在响应中收到错误时,会触发 onCompleted 方法。这是正常行为吗?

 const [createPerson] = useMutation(CreatePerson, 
   onCompleted: () => 
     console.log('even onError it`s executed')
   
 )

【问题讨论】:

您能否也发一下createPerson 电话?这不是正常行为。正常行为是触发 onError 之类的东西。 这是我从服务器得到的响应:data: null, errors: [message: ''already exists", path: ["/createPerson"], .... ],... 是的,我对完整的函数调用更感兴趣,因为错误处理可能存在问题。 await createPerson( variables: input: name: user.name, email: user.email , ) 您是否设置了特定的错误策略? 【参考方案1】:

根据我们在聊天中的讨论,我认为您已将 Apollo Provider 的错误策略设置为 ignore

忽略:忽略允许您读取与 GraphQL 错误一起返回的任何数据,但不会保存错误或将它们报告给您的 UI。

这就是 GraphQL 错误被忽略的原因。只有在使用默认策略none 时才会触发它们。

有关错误策略here 和此thread 的更多信息。

【讨论】:

我将其更改为默认错误策略,现在我尝试在 apolloProider 中捕获所有 API 错误,因为我想阻止默认错误页面 如果你想保持你当前的结构,你也可以检查你从onCompleted函数得到的数据属性的状态码,只有在没有错误的情况下才做。但这是一种 hack,必须在任何地方实施。

以上是关于即使出现错误,onCompleted 的 useMutation 也会被执行的主要内容,如果未能解决你的问题,请参考以下文章

flatMap 不返回 onCompleted

Apollo useMutation,onCompleted完成在登录身份验证期间总是返回true?

仅当验证成功时如何执行 a4j:commandLink oncomplete?

Firebase 存储等待 uploadTask.onComplete 已过时

Kotlin 协程Flow 流收尾工作 ( finally 代码块收尾 | onCompletion 代码块收尾 | onCompletion 中获取异常信息 | catch 代码块中捕获异常 )

Kotlin 协程Flow 流收尾工作 ( finally 代码块收尾 | onCompletion 代码块收尾 | onCompletion 中获取异常信息 | catch 代码块中捕获异常 )