我们如何在保持所有结果的同时组合 3 个或更多可完成的未来

问题描述

我有 3 个要链接的服务

CompletableFuture<String> serviceA
CompletableFuture<String> serviceB(String resultFromA)
CompletableFuture<String> serviceC(String resultFromA,String resultFromB)

如果我使用 thenCompose,我似乎无法保持第一个结果

serviceA.thenCompose(a -> serviceB(a))
        .thenCompose(b -> serviceC(a,b));  // a is lost

如果我使用 CompletableFuture.allOf(),我看不到它允许链接 - 按顺序运行并传递结果。

我将修改 serviceB,使其返回一个 Pair 或某个复合对象,但有没有更好的方法

解决方法

serviceA.thenCompose(a -> serviceB(a).thenCompose(b -> serviceC(a,b)));