graphql - 在我的查询中,我可以使用参数的结果来获取该查询中的更多信息吗?

标签 graphql graphql-js

请原谅我措辞糟糕的问题,但这里有一些代码来解释我想要做什么(slugvalue 在此查询之外提供):

const query = `{
  post(slug: "${slug}") {
    content
    createdAt
    id <--- I want this id for my reply query
    slug
  }

  reply(replyTo: "id") { <--- The second query in question
    content
    createdAt
    id
    slug
  }

  user(id: "${value}") {
    username
  }
}`;

刚刚开始使用 GraphQL,我很喜欢这样一个事实:我可以一次性查询多个数据库。如果我也可以执行一些“queryception”,那就太好了,但我不确定这是否可能。

最佳答案

在考虑 GraphQL 时,请务必记住,给定类型的每个字段均由 GraphQL 同时解析。

例如,当您的 post 查询返回 Post 类型时,GraphQL 将解析 contentcreatedAt同时字段。一旦这些字段被解析,它就会转移到查询的下一个“级别”(例如,如果 content 返回类型而不是标量,那么它将尝试解析这些字段。

每个单独的查询(postreplyuser)实际上都是 Root Query 类型的字段,并且逻辑相同也适用于他们。这意味着无法在 reply 中引用 post 返回的 id - 两个查询将同时触发。

上述情况存在一个异常(exception),即突变,它实际上是按顺序解决的,而不是同时解决的。这意味着,即使您仍然无法将 post 的结果用作 reply 查询中的变量,您也可以使用如果两者都是突变,则将 id 从一个传递到另一个上下文。然而,这是非常hackish的,需要客户端以特定的顺序请求突变。

一个更可行的解决方案是在客户端简单地处理这个问题,将其分成两个请求,并等待触发第二个请求,直到第一个请求返回。

最后,您可以考虑重新设计架构,以防止首先进行多个查询。例如,您的帖子类型可以只包含一个 replies 字段,该字段将解析为与返回的帖子 ID 相对应的所有回复。

关于graphql - 在我的查询中,我可以使用参数的结果来获取该查询中的更多信息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48482817/

相关文章:

graphql - 如何按Graphql查询结果分组

graphql - 新 GraphQL buildSchema 的嵌套查询

laravel - 按 laravel lighthouse graphql 中的相关列排序

php - SilverStripe GraphQL - 查询具有后代的类型时出错

java - 如何在 GraphQL Java 中解析多个模式文件

具有多对多关系的类型元素的 GraphQL 解析器

node.js - GraphQLJS 使用 .graphql 文件从 NodeJS 进行查询

graphql - 如何实现graphQL子查询

javascript - 在函数之外返回值

graphql - graphql 中的 AST 是什么?