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

In my query, could I use the result of a parameter to get more info in that query?

请原谅我这个措辞糟糕的问题,但这里有一些代码可以解释我正在尝试做的事情(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 查询 returns 一个 Post 类型时,GraphQL 将同时解析 contentcreatedAt 字段。解析这些字段后,它会继续查询的下一个 "level"(例如,如果 content 返回类型而不是标量,它将尝试解析这些字段。

您的每个查询(postreplyuser)实际上都是根查询类型的字段,同样的逻辑也适用于它们。这意味着无法在 reply 中引用 post 返回的 ID——两个查询将同时触发。

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

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

最后,您可以考虑重新设计您的架构,以防止一开始就必须有多个查询。例如,您的 Post 类型可以简单地包含一个 replies 字段,该字段将解析与返回的 post 的 ID 对应的所有回复。