RxJS 5 with Angular 2: 重试失败 Observable 但随后转发错误

RxJS 5 with Angular 2: Retry failed Observable but then forward error

当 HTTP 请求失败时,我想每隔 1 秒重试两次。如果它第三次再次失败,我想将该错误转发给观察者。我在最后一部分遇到了问题。

来自 DataService.get()

的 HTTP 请求
return this.http.get(url,options)
    .retryWhen(errors => errors.delay(1000).take(2))
    .catch((res)=>this.handleError(res));

订阅

this.dataSvc.get('/path').subscribe(
    res => console.log(res),
    err => console.error(err),
    () => console.log('Complete')
);

我的服务器设置为总是 return 错误(状态 400 Bad request)。

Angular 2 rc.6RxJS 5 beta 11Typescript 2.0.2

我用了the scan operator:

return this.http.get(url,options)
    .retryWhen(errors => errors.delay(1000).scan((acc,source,index)=>{
        if(index) throw source;
    }))
    .catch((res)=>this.handleError(res));

scan()的参数:

  • acc:一个累加器(想想Array.reduce())。如果你修改return它,新值将在下一次执行时作为acc参数提供
  • source:前一个操作发出的值(或异常)(delay(),它本身从 errors 转发它)
  • index:当前发射值的索引(从零开始)

这发出了 3 个 HTTP 请求(不知道为什么;我本以为是 2 个)。在第三次失败时,它抛出 source——发出的错误——被 handleError()

捕获