我在retryWhen中使用PublishSubject,以允许用户重试该操作,类似于this answer。一切正常,但是有一个问题-用户单击重试3次后,我不应再允许重试,并且应该中止该操作。有没有办法将重试次数限制为3次? 我尝试了publishSubject.take(3)运算符,但没有用。
答案 0 :(得分:1)
运算符,例如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*/)
);