如何限制重试次数

时间:2019-02-25 10:23:06

标签: rx-java rx-java2 rx-android reactivex

我在retryWhen中使用PublishSubject,以允许用户重试该操作,类似于this answer。一切正常,但是有一个问题-用户单击重试3次后,我不应再允许重试,并且应该中止该操作。有没有办法将重试次数限制为3次? 我尝试了publishSubject.take(3)运算符,但没有用。

1 个答案:

答案 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*/)
);