如何仅在内部可观察到错误时重试?
How to retry on error only inner observable?
我有以下示例:
const result = http.get('http://google.com')
.switchMap(() => 'http://example.com')
// This retry should retry only example.com
.retryWhen(error =>
(error instanceof Response && error.status == 429) ?
Observable.timeout(5000) : Observable.throw(error))
// This retry should retry google.com
.retryWhen(error => Observable.timeout(5000))
我想要一个 retryWhen,它将只重试他的直接父级。然后,如果出现全局错误,我将重试整个序列。 RxJS 5 有简单的方法吗?
UPD:这些只是示例。实际上情况更复杂,我只需要一个想法。
您只需要将 retryWhen
放在 switchMap
中:
const inner = http.get('http://example.com')
// This retry should retry only example.com
.retryWhen(error =>
(error instanceof Response && error.status == 429) ?
Observable.timer(5000) : Observable.throw(error))
const outer = http.get('http://google.com')
.switchMap(() => inner)
// This retry should retry google.com
.retryWhen(error => Observable.timeout(5000))
我有以下示例:
const result = http.get('http://google.com')
.switchMap(() => 'http://example.com')
// This retry should retry only example.com
.retryWhen(error =>
(error instanceof Response && error.status == 429) ?
Observable.timeout(5000) : Observable.throw(error))
// This retry should retry google.com
.retryWhen(error => Observable.timeout(5000))
我想要一个 retryWhen,它将只重试他的直接父级。然后,如果出现全局错误,我将重试整个序列。 RxJS 5 有简单的方法吗?
UPD:这些只是示例。实际上情况更复杂,我只需要一个想法。
您只需要将 retryWhen
放在 switchMap
中:
const inner = http.get('http://example.com')
// This retry should retry only example.com
.retryWhen(error =>
(error instanceof Response && error.status == 429) ?
Observable.timer(5000) : Observable.throw(error))
const outer = http.get('http://google.com')
.switchMap(() => inner)
// This retry should retry google.com
.retryWhen(error => Observable.timeout(5000))