Java 连锁店未来的业务
我有几个单独的操作,我想以相同的风格链接,就像我们在JS中为Java 连锁店未来的业务,java,completable-future,Java,Completable Future,我有几个单独的操作,我想以相同的风格链接,就像我们在JS中为Promises所做的那样 所以我现在有这样的代码: CompletableFuture<Data1> data1 = ...; CompletableFuture<Data2> data2 = ...; // Fetch in parallel! CompletableFuture.allOf( data1, data2
Promises
所做的那样
所以我现在有这样的代码:
CompletableFuture<Data1> data1 = ...;
CompletableFuture<Data2> data2 = ...;
// Fetch in parallel!
CompletableFuture.allOf(
data1,
data2
).join(); // wait 2 threads to finish
CompletableFuture<Data3> data3 = ... // i need data1 here
data3.join();
返回一个CompletableFuture
。它不知道givneCompletableFuture将返回的类型:
给定的CompletableFuture
s的结果(如果有)不会反映在返回的CompletableFuture
中,但可以通过单独检查来获得
因此,如果您想使用它们,您必须获取data1
和data2
的返回值。当使用allOf
时,无法在输入期货上调用join
来获取依赖函数中的值(尽管您知道这些调用不会阻塞)
但是,当您正好有两个期货要组合时,就不需要使用allOf
;您可以将它们平滑地组合在一起:
CompletableFuture<FinalResult> f = data1
.thenCombine(data2, (result1, result2) -> another CompletableFuture)
.thenCompose(Function.identity())
.thenAccept(result3 -> …);
CompletableFuture f=data1
.thenCombine(数据2,(结果1,结果2)->另一个可完成的未来)
.thenCompose(Function.identity())
.然后接受(结果3->…);
然后accept
将评估将结果值映射到新结果值的函数,而然后compose
将评估将结果值映射到新未来的函数。方法然后combine
是然后accept
的两个未来变体,允许将两个值映射到一个新值
但是,thenCombine
没有两个未来变量,因此解决方案是将从两个中间值创建的未来视为一个值(获取未来的未来),然后是thenCompose(Function.identity())
,以将“值”映射到未来。然后,我们可以链接一个函数来处理第三个结果,一旦未来完成
CompletableFuture<FinalResult> f = data1
.thenCombine(data2, (result1, result2) -> another CompletableFuture)
.thenCompose(Function.identity())
.thenAccept(result3 -> …);