请原谅我措辞严厉的问题,但是这里有一些代码可以解释我尝试做的事情(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,我喜欢这样一个事实,即我可以一次查询多个数据库。如果我还可以执行一些&#34; queryception&#34;那就太棒了。但我不确定这是否可能。
答案 0 :(得分:4)
在考虑GraphQL时,记住给定类型的每个字段都由GraphQL 同时解析非常重要。
例如,当您的post
查询返回Post
类型时,GraphQL会同时解析content
和createdAt
字段。一旦这些字段得到解决,它就会转移到下一个&#34;级别&#34;查询(例如,如果content
返回一个类型而不是标量,它将尝试解析这些字段。
您的每个查询(post
,reply
和user
)实际上都是根查询类型的字段,同样的逻辑也适用于它们。这意味着无法在post
内引用reply
返回的ID - 两个查询都会同时被解雇。
上述例外以突变的形式存在,实际上是顺序解决而不是同时解决。这意味着,即使您仍然无法在post
查询中使用reply
作为变量的结果,您也可以使用上下文传递如果两者都是突变,则从一个到另一个。然而,这非常hackish,并要求客户以特定顺序请求突变。
更可行的解决方案是在客户端简单地处理这个问题,方法是将其分解为两个请求,并等待第二个请求启动,直到第一个返回。
最后,您可以考虑重新设计架构,以防止首先出现多个查询。例如,您的帖子类型可能只有一个replies
字段,该字段可以解析与返回的帖子ID相对应的所有回复。