请原谅我措辞糟糕的问题,但这里有一些代码来解释我想要做什么(slug
和 value
在此查询之外提供):
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 将解析 content
和 createdAt
同时字段。一旦这些字段被解析,它就会转移到查询的下一个“级别”(例如,如果 content
返回类型而不是标量,那么它将尝试解析这些字段。
每个单独的查询(post
、reply
和 user
)实际上都是 Root Query 类型的字段,并且逻辑相同也适用于他们。这意味着无法在 reply
中引用 post
返回的 id - 两个查询将同时触发。
上述情况存在一个异常(exception),即突变,它实际上是按顺序解决的,而不是同时解决的。这意味着,即使您仍然无法将 post
的结果用作 reply
查询中的变量,您也可以使用如果两者都是突变,则将 id 从一个传递到另一个上下文。然而,这是非常hackish的,需要客户端以特定的顺序请求突变。
一个更可行的解决方案是在客户端简单地处理这个问题,将其分成两个请求,并等待触发第二个请求,直到第一个请求返回。
最后,您可以考虑重新设计架构,以防止首先进行多个查询。例如,您的帖子类型可以只包含一个 replies
字段,该字段将解析为与返回的帖子 ID 相对应的所有回复。
关于graphql - 在我的查询中,我可以使用参数的结果来获取该查询中的更多信息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48482817/