如何仅在内部可观察到错误时重试?

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))