java CompletableFuture.thenCombine returns CompletableFuture



我的应用程序中有 3 种不同的方法。所有人都在CompletableFuture<SomeType>返回。我想并行执行方法 1 和 2。完成方法 1 和 2 后,我想使用方法 1 和 2 返回值中的参数触发方法 3。

代码示例:

CompletableFuture<Request> future1 = RequestConverter.Convert(requestDto);
CompletableFuture<String> future2 = tokenProvider.getAuthToken();
CompletableFuture<CompletableFuture<String>> future3 = 
future1.thenCombine(future2,(request,token) -> 
requestProcessor.Process(request,token)); 

但是上面代码的问题在于我得到了CompletableFutureCompletableFuture。我想避免这种情况,并在不阻塞的情况下获得一个简单的CompletableFuture<String>。这可能吗?

由于没有将thenCombine()thenCompose()结合起来的方法,您可以使用thenCompose()来解开来自thenCombine()的嵌套CompletableFuture

CompletableFuture<CompletableFuture<String>> future3 = 
    future1.thenCombine(future2, (request,token) -> 
        requestProcessor.Process(request,token));
CompletableFuture<String> future4 = future3.thenCompose(c -> c);

假设你有Pair类。

class Pair<L, R> {
    public final L left;
    public final R right;
    public Pair(L left, R right) {
        this.left = left;
        this.right = right;
    }
}
然后

你可以先组合成一对,然后作曲。

CompletableFuture<Request> future1 = RequestConverter.Convert(requestDto);
CompletableFuture<String> future2 = tokenProvider.getAuthToken();
CompletableFuture<String> future3 = future1
    .thenCombine(future2, Pair::new)
    .thenCompose(pair -> requestProcessor.Process(pair.left, pair.right));

相关内容

  • 没有找到相关文章

最新更新