如何限制retryWhen计数

How to limit retryWhen count

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

运营商,例如 retryWhen 有一个次要流程,其结果会影响主要流程。因此,也可以对该次级流执行流操作,因此您可以应用各种运算符来调整其结果:

正在调整:

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

而不是使用retry或retryWhen,为什么不试试这个基于错误捕获操作的解决方案

let count = 0;
let retry_limit = 2;
from([1])
  .pipe(
    catchError((err, obs) => {
       if (count >= retry_limit) {
         return throwError(err)
       }
       count++
       return obs.pipe(delay(500))
  })
);