CompletableFuture цепочка - PullRequest
2 голосов
/ 14 апреля 2020

Я ищу предложение по объединению нескольких методов, которые являются 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);
}

Теперь мое требование:

первый метод возвращает идентификатор. Я передам этот идентификатор во второй метод. При успешном результате второго метода, который возвратит CompletableFuture, этот первичный идентификатор будет передан третьему методу, который вставит некоторые данные в дочернюю таблицу.

Как выполнить сцепление с JDK8 CompletableFutures.

1 Ответ

1 голос
/ 14 апреля 2020

Используйте один из методов thenCompose () , которые сглаживают фьючерсы так же, как Stream.flatMap () , сглаживает потоки:

CompletableFuture<Long> future = searchMaster()
    .thenCompose(id -> insertIntoMaster(id))
    .thenCompose(primaryId -> insertIntoChildDB(primaryId));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...