在执行子解析程序之前,是否可以不必等待父@GraphQLContext
解析程序完全解析?
通过查看源代码,我认为这可能是通过利用期货来实现的,比如:
@GraphQLQuery
public Future<User> user() {
return CompletableFuture.supplyAsync(...);
}
@GraphQLQuery
public TwitterProfile twitterProfile(@GraphQLContext Future<User> user) {
...
}
有什么想法吗?
您可以使用CompletionStage
(CompletableFuture
是其中的一个子类型(组成异步链。简单的Future
是不够的,因为它不允许合成。这是graphql-java本身的一个特性,而不是SPQR。
@GraphQLQuery
public CompletableFuture<User> user() {
return CompletableFuture.supplyAsync(...);
}
@GraphQLQuery
public TwitterProfile twitterProfile(@GraphQLContext User user) {
...
}
请注意,线程和并发仍然完全在您的控制之下。这只允许您根据需要编写异步解析器,但您需要实际启动一个线程来自己完成承诺(例如通过supplyAsync
(。这也意味着可以同时解析同一级别上的字段。
也就是说,GraphQL规范要求在子字段之前解析父字段:
需要知道正在评估的对象值和对象类型
(强调矿(。这主要是因为子查询需要解析父查询的结果,而不是一些特殊的约束。如果你有一个真正独立于父字段的字段,我甚至认为它一开始就不应该有父字段。