RxJS Observable:使用计数重试,然后使用通知程序
RxJS Observable: retry using count and then using notifier
首先,我想使用简单计数重试:
- 重试源可观察
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
然后,我想允许用户手动重试。当重试通知器 observable (retry$
) 发出时,再次重试 observable,之后每次都会发出错误。
我尝试为此使用 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
运营商将保留它 'running'.
首先,我想使用简单计数重试:
- 重试源可观察
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
然后,我想允许用户手动重试。当重试通知器 observable (retry$
) 发出时,再次重试 observable,之后每次都会发出错误。
我尝试为此使用 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
运营商将保留它 'running'.