В rx-java2 есть оператор Maybe.repeat () / Flowable.repeat (). Но если Maybe / Flowable пуст, он просто повторно подписывается на него и не выдает ни значений, ни статуса завершения.
Как я могу повторно подписаться, только если предыдущая подписка что-то издала?
В Projectreactor может использоваться оператор repeatWhen ():
someMono.repeatWhen { it.takeWhile { i -> i > 0 } }
Но в rx-java2 этот оператор не работает таким образом. Поэтому в настоящее время я выдаю сообщение об ошибке, если Maybe пусто, а затем восстанавливаюсь после этой ошибки:
someMaybe
.switchIfEmpty(Maybe.error(MyStopException()))
.repeat()
.onErrorResumeNext { th: Throwable ->
if (th is MyStopException)
Flowable.empty()
else
Flowable.error(th)
}
Есть ли лучший / более естественный способ сделать это?