【发布时间】:2019-08-22 18:50:30
【问题描述】:
root 参数究竟如何用于桑格利亚汽酒? 这里是documentation
preparedQuery.execute(userContext = someCustomCtx, root = event))
查询已经包含解析器,那么如何使用root?
【问题讨论】:
root 参数究竟如何用于桑格利亚汽酒? 这里是documentation
preparedQuery.execute(userContext = someCustomCtx, root = event))
查询已经包含解析器,那么如何使用root?
【问题讨论】:
Graphql 查询本质上是嵌套的,这意味着每个GraphQL 查询都具有树的形状,它们绝不是圆形的。
执行从查询的根开始。首先,执行器调用顶层字段的解析函数。它一直等到所有这些解析函数都返回了一个值。一旦发生这种情况,GraphQL 服务器将获取此解析函数的返回值并将其传递给二级字段的解析函数,因为这些是查询中请求的字段。
树的一个节点的结果对其所有直接子节点都可用,这会以级联方式沿树向下继续。
同时,Context 是特定查询中所有解析器共享的对象,用于包含每个请求的状态,包括身份验证信息、数据加载器实例以及解析查询时应考虑的任何其他内容. Context 与 Root 的不同之处在于它先计算,然后可用于所有字段。
现在有了所有这些上下文,为了回答您的问题,顶级字段的解析器具有可供它们使用的根值。这个root 值type 是在执行器本身中定义的——
case class Executor[Ctx, Root]
当您调用execute 函数时,您传递了一个Root 类型的实例(或任何其他可以证明与此type 相同的实例)。
如果你的用例不需要使用这个Root,你可以设置为Unit,在调用execute方法时传入root = (),。
【讨论】: