在我的查询中,我是否可以使用参数的结果来获取该查询中的详细信息?



请原谅我措辞糟糕的问题,但这里有一些代码来解释我正在尝试做什么(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,我喜欢我可以一次查询多个数据库的事实。如果我也可以执行一些"查询感受",那就太好了,但我不确定这是否可能。

在考虑 GraphQL时,重要的是要记住,给定类型的每个字段都是由 GraphQL同时解析的。

例如,当您的post查询返回Post类型时,GraphQL 将同时解析contentcreatedAt字段。解析这些字段后,它将移动到查询的下一个"级别"(例如,如果content返回类型而不是标量,它将尝试解析这些字段。

每个单独的查询(postreplyuser)实际上是根查询类型的字段,相同的逻辑也适用于它们。这意味着无法引用postreply内返回的 id - 两个查询将同时触发。

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

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

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

最新更新