#java #asynchronous #reactive-programming #spring-webflux
Вопрос:
У меня есть этот простой метод, который многократно вызывает внешнюю службу, пока она не получит completed
ответ,
private void status(String id) {
restClient
.get(url "/status/" id)
.send(StatusResponse.class)
.repeatWhen(completed -> completed.delayElements(Duration.ofMillis(2000)))
.takeUntil(statusResponse->statusResponse.getStatus().equals("completed"))
.doOnComplete(//HERE I want to work with the object returned from the takeUntil operator)
.doOnError(e -> log.error("Error :: " e.getMessage(), e))
.subscribe();
}
Мне нужно сделать еще несколько вычислений после того, как я получу completed
ответ, насколько я понимаю, лучший способ сделать это- doOnComplete
использовать оператора, однако у doOnComplete
оператора нет ответа от предыдущего оператора. Как прочитать statusResponse
объект в doOnComplete
или каковы альтернативы для него ?
Комментарии:
1. Если вам нужен только ответ от завершенного вызова, вам следует заменить
doOnComplete
на.last().map(response -> { ...})
.2. Если вы прочитаете документацию, вы увидите, что
doOnComplete
она предназначена для побочных эффектов, а не для того, для чего вы хотите ее использовать, вам следует изучить возможность использованияmap
илиflatMap