Bee*_*ice 2 observable typescript rxjs5 angular
当HTTP请求失败时,我想间隔1秒重试两次。如果它第三次再次失败,我想将该错误转发给观察者。我在最后一部分遇到了麻烦。
来自DataService.get()的 HTTP请求
return this.http.get(url,options)
.retryWhen(errors => errors.delay(1000).take(2))
.catch((res)=>this.handleError(res));
Run Code Online (Sandbox Code Playgroud)
订阅
this.dataSvc.get('/path').subscribe(
res => console.log(res),
err => console.error(err),
() => console.log('Complete')
);
Run Code Online (Sandbox Code Playgroud)
我的服务器设置为始终返回错误(状态400 Bad request)。
我希望应用程序发出第二个请求,发出第三个请求,然后抛出要捕获的错误 this.handleError()
实际发生的情况:应用程序发出第二个请求,发出第三次请求,然后Observable完成而没有错误(将“ Complete ”打印到控制台)
Angular 2 rc.6,RxJS 5 beta 11,Typescript 2.0.2
我用的scan操作:
return this.http.get(url,options)
.retryWhen(errors => errors.delay(1000).scan((acc,source,index)=>{
if(index) throw source;
}))
.catch((res)=>this.handleError(res));
Run Code Online (Sandbox Code Playgroud)
参数scan():
acc:一个累加器(请考虑Array.reduce())。如果您修改并返回它,则新值将acc在下一次执行时作为参数提供source:前一个操作(delay()本身发出的值)发出的值(或异常errors)index:当前发出的值的索引(从零开始)这发出3个HTTP请求(不知道为什么;我原本希望有2个)。在第3次失败时,它抛出source-发出的错误-被捕获handleError()
| 归档时间: |
|
| 查看次数: |
1817 次 |
| 最近记录: |