RxJS 可观察:使用计数重试,然后使用通知程序重试



首先,我想使用一个简单的计数重试:

  • 重试可观察n次的源。
  • 然后,发出错误。

(最好在每次重试后立即发出错误,但retry(count)似乎没有这样做。

如果我理解正确,这是retry(count)的行为:

{
new Rx.Observable(observer => {
console.log("subscribe");
observer.error("ERROR");
})
.retry(3)
.subscribe({
error: console.log
});
}
// subscribe
// subscribe
// subscribe
// subscribe
// ERROR

然后,我想允许用户手动重试。当重试通知程序可观察量 (retry$( 发出时,再次重试该可观察量,之后每次都会发出错误。

我尝试为此使用retryWhen,但是虽然确实发生了重试,但从未发出错误。

我想重试,但也发出任何错误,以便我可以在重试运行时在用户界面中显示它们。

{
const retrySubject = new Rx.Subject();
const retry$ = retrySubject.asObservable();
new Rx.Observable(observer => {
console.log("subscribe");
observer.error("ERROR");
})
.retryWhen(() => retry$)
.subscribe({
error: console.log
});
retrySubject.next();
}
// subscribe
// subscribe

此外,我不确定如何将其与retry(count)结合起来。如果我链接重试运算符,则会相互触发。

>retryWhen提供了一连串错误 - 您可以查看流并在 3 次发射后忽略它,然后仅在用户触发时才重试。

const retrySubject = new Rx.Subject();
const retry$ = retrySubject.asObservable();
new Rx.Observable(observer => {
console.log("subscribe");
observer.error("ERROR");
})
.retryWhen(errors => Rx.Observable.merge(
errors
.do(error => console.log(error)) // log error
.filter((error, index) => index < 3), // take only first 3 and ignore the rest
retry$ // also retry with user request
))
.subscribe();
retrySubject.next();

您可以使用take(3)而不是filter但这会停止errors流,因此错误记录也会停止。filter操作员将使其保持"运行"。

相关内容

最新更新