angular - 使用 Angular http.get 重试失败后抛出错误

标签 angular reactjs rxjs retrywhen

我正在尝试通过重试实现 Angular5 http.get。我写了

http.get<any>('/api/study').retryWhen(
    (errors: Observable<any>):Observable<any> => {
        return errors.flatMap((error: any) => {
            if (error.status  == 500) {
                return Observable.of(error.status).delay(1000);
            }
            return Observable.throw(error);
        }).take(5);
    });

如果出现错误 500,这将继续重试最多 5 次。但是,如果它连续失败 5 次,那么它会返回成功(带有空数据)。我不想要那个。相反,我希望它抛出最后一个错误。

我试着把 .concat(Observable.throw({})) 放在 take() 之后,这行得通,但它没有给我任何信息,比如状态码最近的错误。

上次重试失败后如何获取最近的错误?

最佳答案

您不需要使用 take(5) 来计算失败的尝试次数,您可以使用局部变量自行计算。

例如你可以这样做:

http.get<any>('/api/study').retryWhen((errors: Observable<any>) => {
    let errors = 0;

    return errors.flatMap((error: any) => {
        if (errors++ < 5 && error.status  == 500) {
            return Observable.of(error.status).delay(1000);
        }
        return Observable.throw(error);
    });
});

关于angular - 使用 Angular http.get 重试失败后抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49013308/

相关文章:

reactjs - React-Router - 链接、重定向、历史记录

typescript - rxjs 多个可观察开关

angular - 为 oauth/token 请求剥离基本授权 header

javascript - 最小 Material 表演示 ID 列未渲染?

angular - 在 Angular2 中,为什么在 setTimeout 之后会有 2 次检查内容和 View ?

javascript - 在draft-js中选择后实体内的光标

reactjs - 传递给 connect() 的组件不会被渲染

javascript - 识别和准确识别 RxJS 中的一系列事件

Angular 8 订阅拦截器中的可观察对象

css - 将 Angular 5 应用程序升级到 Angular 7 后,样式未从 styles.css 加载