Angular 2 RxJS Observable:重试 429 状态除外
Angular 2 RxJS Observable: Retry except on 429 status
我已经编写了我的 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
您可以将 429 错误的处理组合到传递给 retryWhen
的 errors
可观察对象中。从 errors
observable 发出的错误将包含 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 observable 在不发出错误或响应的情况下完成,您可以简单地过滤 429 个错误。
我已经编写了我的 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
您可以将 429 错误的处理组合到传递给 retryWhen
的 errors
可观察对象中。从 errors
observable 发出的错误将包含 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 observable 在不发出错误或响应的情况下完成,您可以简单地过滤 429 个错误。