即使出现错误,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 也会被执行的主要内容,如果未能解决你的问题,请参考以下文章
Apollo useMutation,onCompleted完成在登录身份验证期间总是返回true?
仅当验证成功时如何执行 a4j:commandLink oncomplete?
Firebase 存储等待 uploadTask.onComplete 已过时
Kotlin 协程Flow 流收尾工作 ( finally 代码块收尾 | onCompletion 代码块收尾 | onCompletion 中获取异常信息 | catch 代码块中捕获异常 )
Kotlin 协程Flow 流收尾工作 ( finally 代码块收尾 | onCompletion 代码块收尾 | onCompletion 中获取异常信息 | catch 代码块中捕获异常 )