Bee*_*ice 2 observable typescript rxjs5 angular
我已经编写了我的Observable(来自HTTP请求)来重试失败.但是,如果服务器响应错误,我想不重试429 Too many requests.
无论如何,当前的实现重试两次,相隔1秒.
return this.http.get(url,options)
.retryWhen(errors => {
return errors.delay(1000).take(2);
})
.catch((res)=>this.handleError(res));
Run Code Online (Sandbox Code Playgroud)
errors是一个观察者.如何获取Response导致错误的基础对象?有了它,我可以访问服务器的状态代码,只有在它不是429时才重试:
return this.http.get(url,options)
.retryWhen(errors => {
if($code == 429) throw errors;
else return errors.delay(1000).take(2);
})
.catch((res)=>this.handleError(res));
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得状态代码retryWhen?
Angular 2 rc.6,RxJS 5 Beta 11,Typescript 2.0.2
car*_*ant 11
您可以将429个错误的处理组合到errors传递给它的observable中retryWhen.从errorsobservable 发出的错误将包含status属性(如果它们是从服务器接收的错误).
如果您不想在发生429错误时重试,而是希望抛出错误,您可以执行以下操作:
return this.http.get(url,options)
.retryWhen((errors) => {
return errors
.mergeMap((error) => (error.status === 429) ? Observable.throw(error) : Observable.of(error))
.delay(1000)
.take(2);
})
.catch((res) => this.handleError(res));
Run Code Online (Sandbox Code Playgroud)
相反,如果您希望HTTP observable完成而不会发出错误或响应,则可以简单地过滤429错误.
| 归档时间: |
|
| 查看次数: |
4665 次 |
| 最近记录: |