Я не очень знаком с этой библиотекой Arrow и с типичным вариантом ее использования, поэтому я буду использовать отрывки Java, чтобы высказать свою точку зрения.
Сначала я хотел бы отметить, что этот тип кажется блокирующим и не ленивым (в отличие от Mono
). Перевод Mono
на этот тип означает, что вы заблокируете свой код и не должны делать этого, например, в середине обработчика контроллера или заблокируете весь сервер.
Это более или менее эквивалентно этому:
Mono<ClientResponse> response = webClient.get().uri("/").exchange();
// blocking; return the response or throws an exception
ClientResponse blockingResponse = response.block();
При этом, я думаю, вы должны быть в состоянии преобразовать Mono
в этот тип, либо вызвав block()
для него и блока try/catch
вокруг него, либо превратив сначала в CompletableFuture
сначала, как:
Mono<ClientResponse> response = webClient.get().uri("/").exchange();
Either<Throwable, ClientResponse> either = response
.toFuture()
.handle((resp, t) -> Either.fold(t, resp))
.get();
Возможно, есть лучшие способы сделать это (особенно с помощью встроенных функций), но все они должны включать блокировку Mono
.