我编写了我的可观察到的(来自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是可观察的。如何获得导致错误的底层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中获取状态代码?
Live demo on Plunker
Angular 2 rc.6,RxJS 5 Beta 11,Typescript 2.0.2
发布于 2016-09-14 00:26:06
您可以将429个错误的处理组合到传递给retryWhen的可观察到的retryWhen中。从errors可观察到的错误将包含一个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));相反,如果希望可以观察到的HTTP完成而不发出错误或响应,则只需过滤429个错误即可。
https://stackoverflow.com/questions/39480348
复制相似问题