Операторы, такие как retryWhen
, имеют вторичный поток, результат которого влияет на первичный поток.Следовательно, управление потоком может быть выполнено и для этого вторичного потока, таким образом, вы можете применять всевозможные операторы для формирования его результата:
Адаптируя это: https://stackoverflow.com/a/47677308/61158
final PublishSubject<Object> retrySubject = PublishSubject.create();
disposable.add(
getData()
.doOnError(throwable -> enableButton())
.retryWhen(observable ->
observable.zipWith(retrySubject,
(o, o2) -> o
)
.take(3) // <------------------------ maximum 3 items from the secondary sequence
.concatWith(Observable.error(new RetriesExhaustedException()));
)
.subscribeWith(/* do what you want with the result*/)
);