如何限制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))
})
);
我在 retryWhen 中使用 PublishSubject 以允许用户重试操作,类似于
运营商,例如 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))
})
);