Как ограничить повторные попытки при подсчете - PullRequest
0 голосов
/ 25 февраля 2019

Я использую PublishSubject в retryWhen, чтобы позволить пользователю повторить операцию аналогично этому ответу .все работает нормально, но есть одна проблема - после 3 раз пользователь нажал на попытку, я больше не должен позволять повтор, и должен прервать операцию.Есть ли способ ограничить повтор до 3 раз?Я пробовал оператор publishSubject.take (3), но он не работал.

1 Ответ

0 голосов
/ 25 февраля 2019

Операторы, такие как 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*/)
);
...