gpt4 book ai didi

Angular 2 RxJS 可观察到的 : Retry except on 429 status

转载 作者:搜寻专家 更新时间:2023-10-30 21:15:04 25 4
gpt4 key购买 nike

我已经编写了我的 Observable(来自 HTTP 请求)以在失败时重试。但是,如果服务器响应 429 太多请求 错误,我不想重试。

无论如何,当前的实现都会重试两次,间隔 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 中获取状态码?

Live demo on Plunker

Angular 2 rc.6RxJS 5 Beta 11Typescript 2.0.2

最佳答案

您可以将 429 错误的处理组合到传递给 retryWhenerrors 可观察对象中。从 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 可观察对象在不发出错误或响应的情况下完成,您可以简单地过滤 429 错误。

关于 Angular 2 RxJS 可观察到的 : Retry except on 429 status,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39480348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com