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

时间:2017-03-29 12:48:28

标签: rxjs reactive

我有以下样本:

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

我想重试一次,只会重试他的直接父母。然后在出现全局错误的情况下,我将重试整个序列。 RxJS 5有一个简单的方法吗?

UPD:这些只是一些例子。实际情况更复杂我只需要一个想法。

1 个答案:

答案 0 :(得分:1)

您只需将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))