java - CompletableFuture 链接结果

标签 java java-8 completable-future

我正在尝试将方法的调用/结果链接到下一个调用。我收到编译时错误 methodE,因为如果我无法从上一次调用中获取 objB 的引用。

如何将上一个调用的结果传递给下一个链?我完全误解了这个过程吗?

Object objC = CompletableFuture.supplyAsync(() -> service.methodA(obj, width, height))
    .thenApply(objA -> {
    try {
        return service.methodB(objA);
    } catch (Exception e) {
        throw new CompletionException(e);
    }
})
   .thenApply(objA -> service.methodC(objA))
   .thenApply(objA -> {
   try {
       return service.methodD(objA); // this returns new objB how do I get it and pass to next chaining call 
       } catch (Exception e) {
           throw new CompletionException(e);
       }
    })
    .thenApply((objA, objB) -> {
       return service.methodE(objA, objB); // compilation error 
  })
 .get();

最佳答案

您可以将中间 CompletableFuture 存储在一个变量中,然后使用 thenCombine:

CompletableFuture<ClassA> futureA = CompletableFuture.supplyAsync(...)
    .thenApply(...)
    .thenApply(...);

CompletableFuture<ClassB> futureB = futureA.thenApply(...);

CompletableFuture<ClassC> futureC = futureA.thenCombine(futureB, service::methodE);

objC = futureC.join();

关于java - CompletableFuture 链接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265253/

相关文章:

Java 11 HTTP客户端异步执行

java - API请求(GET调用)是否可以向客户端返回响应并启动后台任务来完成请求

multithreading - 使用 Spring boot 和 CompletableFuture 及其线程管理编写异步 Rest API

java - 如何在启动时将 Maven 作为守护进程或独立运行

java - 尽可能在 Collectors 中使用 Characteristics.UNORDERED 重要吗?

java - 为对象创建一个公共(public)构建器,而不管传入的字段如何

java - 获取深度对象中的每个对象

java - 监视 Java 应用程序上的锁争用

java - ArrayIndexOutOfBoundsException 的数组足够大,可以容纳我提供的数据

java - 如何在 HL7 消息中使用转义字符