Один вариант будет для getJobStatus()
Mono
только для генерации, когда задание выполнено, что не всегда легко в зависимости от того, как в настоящее время реализовано Mono
.
Для опроса, при условии, что Mono
опрашивает каждый раз, когда вы подписываетесь на него вы можете использовать repeatWhen
в паре с takeUntil
:
getJobStatus()
.repeatWhen(iter -> Mono.delay(Duration.ofMillis(pollDelay))) //(1)
.takeUntil(JobStatus::isDone) //(2)
.last() //(3)
(1) повторно подписываться на источник Mono
(при этом Flux<JobStatus>
)
(2) отменяет вышеуказанный цикл повторения, как только возвращенное состояние помечается как выполненное.
(3) переключается на Mono<JobStatus>
который выдает статус последней итерации (то есть тот, который помечен как выполненный)