当前位置: 首页 > 知识库问答 >
问题:

阿波罗错误处理-为什么要反应应用程序崩溃?

南宫天逸
2023-03-14

有人能解释一下,当我尝试使用返回错误的突变时,为什么我的react应用程序apollo会这样做?

GraphQL突变返回此信息(响应代码为200):<代码>{“错误”:[{“错误”:{“结果”:“身份。未找到”,“错误”:“身份验证失败”,“状态代码”:401}}}],“数据”:{“登录”:null}}

我的突变是这样的:

export const LOGIN_MUTATION = gql`
    mutation($input: LoginInput!) {
        login(input: $input) {
            token
        }
    }
`;

打电话:

const handleSignIn = () => {
        loginMutation({
            variables: {
                input: {
                    clientId: config.clientId,
                    username: userName,
                    password: password,
                    clientSecret: config.clientSecret
                }
            }
        });
    };

它会像预期的那样运行一段时间(呈现我自己的自定义错误组件-<代码>{错误

若我将catch回调添加到变异调用中,它将按预期工作。

然而,我在apollo文档中没有发现任何地方提到需要始终以这种方式捕获GraphQL错误。如果我理解正确的话,这应该足够了:const[loginMutation,{data,loading,error}]=使用变异(LOGIN\u变异)

这种行为是正确的还是我错过了什么?

版本:

"@apollo/react-hooks": "^3.1.3"
"apollo-boost": "^0.4.7"
"graphql": "^14.5.8"

共有1个答案

滕成双
2023-03-14

如果您的响应包含错误对象或发生网络错误,则mutate函数将返回一个promise,默认情况下,该promise将被拒绝。如果将错误策略更改为忽略或全部,则响应中出现的错误不会导致拒绝promise,但仍会导致网络错误。

避免这种行为的唯一方法是通过onError参数提供错误处理程序。如果提供了onError,则Mutate返回的Promise将始终解析,并且任何相关错误(取决于您的errorPolicy)都将传递给onError

可以在此处找到有关Apollo中错误处理的更多详细信息。有关未处理的Promise拒绝的更多详细信息可以在此处找到。

 类似资料:
  • 应用程序崩溃,我会得到以下错误: 致命异常:主进程:com.example.ayyan.JellyBeanEstimator,pid:2960 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.ayyan.JellyBeanEstimator/com.example.ayyan.JellyBeanEstimator.MainAc

  • 我有以下疑问 以及以下突变 并且响应是正确的,但apollo store不更新。(我有dataIdFromObject:

  • 我已经用React Apollo设置了一个React应用程序,可以成功地查询我的API。 但是,当我进行突变时,会出现奇怪的效果。我成功地取回了所有数据(如Chrome开发工具的网络选项卡中所示),但是当尝试数据时,它说它是。 以下是相关代码: 因此,当我调用函数时,我在控制台中收到以下内容: 但是在网络选项卡中查看时,我看到数据毕竟确实存在,并且正是我正在寻找的。此外,我的数据库已正确更新所有预

  • Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 一、背景介绍 服务端基于 Spring Boot 和 Spring Cloud 开发,打包后可以直接运行,不需要额外安装 Tomcat 等应用容器。 Java 客户端不依赖任何框架,能

  • 应用程序由于stacktrace的StackOverflow错误而不时崩溃(见下文)。 该错误意外地出现在各种方案中。我们无法模拟它或预测它的发生。 提前谢谢你。 Stacktrace错误(缩短版):

  • 我收到这些错误; java.lang.Runtime异常:无法加载脚本。请确保您正在运行地铁服务器(运行“反应本机启动”),或者您的捆绑包“index.android.bundle”已正确打包以供发布。