我在retryWhen中使用了一个PublishSubject,以允许用户像this answer一样重试该操作。一切正常,但有一个问题-在用户点击重试3次后,我应该不再允许重试,并应该中止操作。有没有办法将重试次数限制在3次以内?我尝试过publishSubject.take(3)运算符,但它不起作用。
发布于 2019-02-25 20:54:05
运算符(如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*/)
);发布于 2021-09-23 19:45:57
不使用重试或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))
})
);https://stackoverflow.com/questions/54864021
复制相似问题