Java 不要等待父级@GraphQLContext解析器解析

Java 不要等待父级@GraphQLContext解析器解析,java,graphql,graphql-java,graphql-spqr,Java,Graphql,Graphql Java,Graphql Spqr,在执行子解析程序之前,是否可能不必等待父解析程序完全解析 通过查看源代码,我认为这可以通过利用未来来实现,比如: @GraphQLQuery public Future<User> user() { return CompletableFuture.supplyAsync(...); } @GraphQLQuery public TwitterProfile twitterProfile(@GraphQLContext Future<User> user) {

在执行子解析程序之前,是否可能不必等待父解析程序完全解析

通过查看源代码,我认为这可以通过利用未来来实现,比如:

@GraphQLQuery
public Future<User> user() {
    return CompletableFuture.supplyAsync(...);
}

@GraphQLQuery
public TwitterProfile twitterProfile(@GraphQLContext Future<User> user) {
    ...
}
@GraphQLQuery
公共未来用户(){
返回CompletableFuture.SupplySync(…);
}
@图形查询
公共TwitterProfile TwitterProfile(@GraphQLContext-Future-user){
...
}

有什么想法吗?

您可以使用
CompletionStage
组成一个异步链(其中
CompletableFuture
是其子类型)。简单的
Future
是不够的,因为它不允许合成。这是GraphQLJava本身的一个特性,而不是专门针对SPQR的特性

@GraphQLQuery
public CompletableFuture<User> user() {
    return CompletableFuture.supplyAsync(...);
}

@GraphQLQuery
public TwitterProfile twitterProfile(@GraphQLContext User user) {
    ...
}
@GraphQLQuery
公共CompletableFuture用户(){
返回CompletableFuture.SupplySync(…);
}
@图形查询
公共TwitterProfile TwitterProfile(@GraphQLContext User){
...
}
请注意,线程和并发仍然完全在您的控制之下。这只允许您根据需要组合异步解析程序,但您需要实际启动一个线程来自己完成承诺(例如,通过
supplyAsync
)。这也意味着同一级别的字段可以同时解析

也就是说,父字段的任务在子字段之前解决:

需要知道正在计算的对象值和对象类型

(我的重点)。这主要是因为子查询需要父查询的结果来解析,而不是一些特殊的约束。
如果有一个字段真正独立于其父字段,我甚至认为它首先不应该有父字段。

您可以使用
CompletionStage
(其中
CompletableFuture
是其子类型)组成一个异步链。简单的
Future
是不够的,因为它不允许合成。这是GraphQLJava本身的一个特性,而不是专门针对SPQR的特性

@GraphQLQuery
public CompletableFuture<User> user() {
    return CompletableFuture.supplyAsync(...);
}

@GraphQLQuery
public TwitterProfile twitterProfile(@GraphQLContext User user) {
    ...
}
@GraphQLQuery
公共CompletableFuture用户(){
返回CompletableFuture.SupplySync(…);
}
@图形查询
公共TwitterProfile TwitterProfile(@GraphQLContext User){
...
}
请注意,线程和并发仍然完全在您的控制之下。这只允许您根据需要组合异步解析程序,但您需要实际启动一个线程来自己完成承诺(例如,通过
supplyAsync
)。这也意味着同一级别的字段可以同时解析

也就是说,父字段的任务在子字段之前解决:

需要知道正在计算的对象值和对象类型

(我的重点)。这主要是因为子查询需要父查询的结果来解析,而不是一些特殊的约束。 如果你有一个真正独立于其父字段的字段,我甚至认为它首先不应该有父字段