代码之家  ›  专栏  ›  技术社区  ›  Ofek Regev

如何限制retryWhen计数

  •  0
  • Ofek Regev  · 技术社区  · 6 年前

    this answer . 一切正常,但有一个问题-用户单击重试3次后,我不应该再允许重试,应该中止操作。有没有办法将重试次数限制在3次? 我试过出版科目。接接线员,但没用。

    0 回复  |  直到 6 年前
        1
  •  1
  •   akarnokd    6 年前

    操作员,例如 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*/)
    );