我正在尝试通过重试实现 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/