Как мне объединить завершаемые фьючерсы и попробовать / поймать в Java? - PullRequest
2 голосов
/ 08 мая 2019

У меня есть метод, который объединяет результаты двух других методов, один из которых является синхронным и выдает исключение, если что-то идет не так, и другой, который возвращает завершаемое будущее, которое завершается с исключением, если что-то идет не так. Я бы хотел, чтобы потребителю моего метода не приходилось иметь дело с перехватом синхронных и асинхронных исключений в двух разных местах. Есть ли достойный способ объединить их в один выход исключения?

Ответы [ 2 ]

3 голосов
/ 08 мая 2019

Если вы хотите, чтобы ваш внешний метод возвращал CompletableFuture, то обычно лучше, если он всегда возвращает CompletableFuture - без бросков и нулей.

Таким образомвызывающая сторона должна обрабатывать исключения или обнулять только один путь.

Когда внешний метод выполняет синхронный вызов, убедитесь, что он находится в блоке try, перехватите любое исключение и верните исключительно завершенный CompletableFutureдля него.

Если вы используете Java 9 или выше, вы можете использовать CompletableFuture.failedFuture, чтобы сделать ошибку в будущем.В противном случае вам, вероятно, следует создать вспомогательный метод, который создаст новое будущее и сразу вызовет completeExceptionally.

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

В дополнение к переносу синхронного вызова метода в CompletableFuture, как предлагает Мэтт , есть CompletableFuture.thenCompose для составления результатов двух отдельных фьючерсов.

...