Передача результатов первого CompleteableFuture другому CompletableFuture по цепочке - PullRequest
1 голос
/ 15 мая 2019

У меня есть асинхронный метод, который возвращает CompletableFuture<ClassA>.

private CompletableFuture<ClassA> asyncA(..)

Я предоставляю открытый метод, который должен возвращать CompleteableFuture<ClassB>, основанный на данных из класса А. Вызывающий этот метод не должен знать о ClassA:

return asyncA(..)
       .thenApply(objectA -> return new ObjectB(objectA.getName());

До этого момента все работало как положено.

Теперь мне нравится выполнять асинхронную операцию после получения результата ObjectB и вызова метода void asyncC, и мне нравится как-то передавать его objectA:

return asyncA(..)
       .thenApply(objectA -> return new ObjectB(objectA.getName())
       .thenRunAsync(asyncC(objectA));

Но похоже, что objectA не определен в thenRunAsync.

Есть ли способ выполнить такую ​​операцию?

1 Ответ

0 голосов
/ 16 мая 2019

Итак, мы придумали это решение:

return asyncA(..)
   .thenApply(objectA -> {
       CompletableFuture.runAsync(() -> asyncC(objectA));
       return new ObjectB(objectA.getName())
      })
...