我已经编写了我的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));
errors
是一个Observable。如何获取导致错误的基础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));
如何在retryWhen
中获取状态代码?
Angular 2 rc.6
,RxJS 5 Beta 11
,Typescript 2.0.2
答案 0 :(得分:11)
您可以将429个错误的处理组合到传递给errors
的{{1}}可观察对象中。如果retryWhen
observable从服务器收到错误,则它们将包含errors
属性。
如果您不想在发生429错误时重试,而是希望抛出错误,您可以执行以下操作:
status
相反,如果您希望完成HTTP observable而不会发出错误或响应,则可以简单地过滤429个错误。