CompletableFuture链接

问题描述 投票:0回答:1

我正在寻找有关链接多个CompletableFutures方法的建议。

假设我需要执行3次操作。

  1. 搜索表单主表
  2. 如果主表中不存在数据,则插入到主表中
  3. 主表主键将用于向子表中插入一些数据。

假设我的方法是这样的:

public static CompletableFuture<Long> searchMaster() {
    return CompletableFuture.supplyAsync (() -> 100L);
}

public static CompletableFuture<Long> insertIntoMaster() {
    return CompletableFuture.supplyAsync (() -> 200L);
}

public static CompletableFuture<Long> insertIntoChildDB() {
    return CompletableFuture.supplyAsync (() -> 300L);
}

现在我的要求是:

第一个方法返回一个ID。我将那个id传递给第二种方法。如果第二个方法成功返回结果,该方法将返回CompletableFuture,则此主ID将传递给第三个方法,该方法将在子表中插入一些数据。

我如何使用JDK8 CompletableFutures进行链接。

java java-8 completable-future
1个回答
0
投票

使用thenCompose()方法之一,它使期货变平,就像Stream.flatMap()变平流:

CompletableFuture<Long> future = searchMaster()
    .thenCompose(id -> insertIntoMaster(id))
    .thenCompose(primaryId -> insertIntoChildDB(primaryId));
© www.soinside.com 2019 - 2024. All rights reserved.