桑格利亚汽酒“ Prepared query”到底如何使用* root *参数?

时间:2019-04-01 14:49:12

标签: scala graphql sangria

桑格利亚汽酒中使用的 root 参数到底如何? 这是documentation

preparedQuery.execute(userContext = someCustomCtx, root = event))

查询已经包含 resolver ,如何使用 root

1 个答案:

答案 0 :(得分:0)

Graphql查询是嵌套的,这意味着每个GraphQL查询都具有树的形状,它们从不循环。

执行从查询的根部开始。首先,执行程序在顶层调用字段的resolve函数。等待所有这些解析函数返回值。一旦发生这种情况,GraphQL服务器将获取此解析函数的返回值,并将其传递给第二级字段的解析函数,因为这些是查询中请求的字段。

树的一个节点的结果可用于其所有直接子节点,并以层叠的方式在树上继续进行。

同时,Context是特定查询中所有解析程序共享的对象,用于包含每个请求状态,包括身份验证信息,数据加载器实例以及解析时应考虑的任何其他内容查询。 ContextRoot的不同之处在于,它首先进行计算,然后可用于所有字段。

现在有了所有这些上下文,为回答您的问题,顶级字段的解析器具有可用的根值。此roottype在执行程序本身中定义-

case class Executor[Ctx, Root]

,当您调用Root函数时,您传递了一个type类型的实例(或任何其他可以证明与此execute相同的实例)。

如果您的用例不需要使用此Root,则可以将其设置为Unit并在调用execute方法时传入root = (),