首页 > 解决方案 > 如何限制重试次数

问题描述

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

标签: rx-javarx-java2rx-androidreactivex

解决方案


运营商,例如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*/)
);

推荐阅读