Apollo gql:当一个有效而一个失败时,我如何处理捆绑查询?

Posted

技术标签:

【中文标题】Apollo gql:当一个有效而一个失败时,我如何处理捆绑查询?【英文标题】:Apollo gql : How do I handle bundled queries when one works and one fails? 【发布时间】:2021-05-28 08:08:46 【问题描述】:

我们正在使用 Apollo Angular Client 来调用 Apollo Server。 我将两个查询组合在一起。其中一个失败了。

在服务器端,其中一个解析器抛出错误。

throw new UserInputError("ERR_MSG",  "message":"addtional info")

当其中一个调用失败时,我应该如何处理客户端的响应?我想使用来自一个查询的数据 并为失败的数据显示错误消息。

this.apollo.watchQuery(
   query: gql(query),
   variables:  a: 'a' 
   ).valueChanges.subscribe(
   (response) => 
   let a = resp.data?.Query1;
   let b = resp.data?.Query2;
   ,
   (err) => 
   // always get here with only the one error
   
);

我什至不确定这是服务器端问题还是客户端问题?我猜我在 SERVER SIDE 做错了什么,因为我什至没有看到在操场上传回的成功数据。

【问题讨论】:

【参考方案1】:

我的问题确实是服务器端的。尽管许多文章都谈到将 null 添加到模式中,但我们让构建自动从类创建我们的模式。所以为了解决我的问题,我必须在我的所有查询中添加 nullable。添加后,我的组合查询将返回成功数据和失败数据以及错误对象。

@Query(() => [MyClass]**,  nullable: true **)

【讨论】:

以上是关于Apollo gql:当一个有效而一个失败时,我如何处理捆绑查询?的主要内容,如果未能解决你的问题,请参考以下文章

@client Apollo GQL 标签中断查询

使用 Apollo gql 编写 WHERE GraphQL 查询

使用命名变量反应 Apollo

如何使用 GQL 从 React 前端的 Apollo 客户端获取错误

在 Vue-apollo 中使用 gql-tag 构造查询字符串

Apollo Server 的 gql 标签和 schema.gql 文件有啥区别?