Angular 2 RxJS Observable:重试除了429状态

时间:2016-09-13 23:19:18

标签: angular typescript observable rxjs5

我已经编写了我的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中获取状态代码?

Live demo on Plunker

Angular 2 rc.6RxJS 5 Beta 11Typescript 2.0.2

1 个答案:

答案 0 :(得分:11)

您可以将429个错误的处理组合到传递给errors的{​​{1}}可观察对象中。如果retryWhen observable从服务器收到错误,则它们将包含errors属性。

如果您不想在发生429错误时重试,而是希望抛出错误,您可以执行以下操作:

status

相反,如果您希望完成HTTP observable而不会发出错误或响应,则可以简单地过滤429个错误。