考虑下面的代码,因为我无法找到更好的词来提问:
CompletionStage<Manager> callingAsyncFunction(int developerId) {
return getManagerIdByDeveloperId(developerId)
.thenCompose(id ->
getManagerById(id, mandatoryComputationToGetManager(id)))
}
mandatoryComputationToGetManager()
返回CompletionStage
现在我怀疑的是:
我想调用mandatoryComputationToGetManager()
,在计算之后我想要调用getManagerById(...)
。
我知道可以采用一种方式,即首先调用thenCompose()
mandatoryComputationToGetManager()
,然后针对thenCompose()
的上一个结果执行另一个getManagerById()
。但是我想弄清楚是否有一种方法没有将thenCompose()
o / p交给另一个mandatoryComputationToGetManager()
o / p,在getManagerById()
结果准备就绪之前我可以保留。
据我了解,在上面的代码mandatoryComputationToGetManager()
中,即使结果尚未从mandatoryComputationToGetManager()
准备就会被调用,我希望等待getManagerById()
给出结果<AndroidKeyStore>false</AndroidKeyStore>
应该异步计算。
答案 0 :(得分:2)
理想情况下,我们应该将一个thenCompose o / p传递给另一个,但是有一种方法可以实现您要执行的操作。
CompletionStage<String> callingAsyncFunction(int developerId) {
return getManagerIdByDeveloperId(developerId)
.thenCompose(id -> getManagerById(id, mandatoryComputationToGetManager()));
}
private CompletionStage<String> getManagerById(
Integer id, CompletionStage<String> stringCompletionStage) {
return stringCompletionStage.thenApply(__ -> "test");
}
private CompletionStage<String> mandatoryComputationToGetManager() {
return CompletableFuture.completedFuture("test");
}