Оператор Flux doOnComplete, каковы альтернативы, которые могут принимать параметры?

#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