gpt4 book ai didi

java - 不等待父 @GraphQLContext 解析器解析

转载 作者:行者123 更新时间:2023-12-02 09:16:05 25 4
gpt4 key购买 nike

在执行子解析器之前是否可以不必等待父@GraphQLContext解析器完全解析?

通过查看源代码,我认为这可以通过利用 future 来实现,如下所示:

@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) {
...
}

请注意,线程和并发仍然完全在您的控制之下。这只是让您根据需要编写异步解析器,但您需要实际启动一个线程来自己完成 promise (例如通过 supplyAsync)。这也意味着同一级别的字段可以同时解析。

也就是说,GraphQL spec要求父字段在子字段之前解析:

the object value being evaluated and the object type need to be known

(强调我的)。这主要是因为子级解析需要父级查询的结果,而不是某些特殊约束。如果你有一个真正独立于其父级的字段,我什至会认为它一开始就不应该有父级。

关于java - 不等待父 @GraphQLContext 解析器解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58976225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com