我正在尝试以
的方式向我的API调用添加一个简单的HTTP重新尝试this.http.post(url, {payload})
.pipe(retry(3)).sub.....
如何添加以下情况?
答案 0 :(得分:2)
您可以使用RxJS中的retryWhen
重试任何请求。以下是在抛出错误之前尝试3次的代码段:
private handleRetry<T>(source: Observable<T>): Observable<T> {
return source.pipe(retryWhen(e => e.pipe(scan((errorCount, error) => {
if (errorCount >= 3) {
throw error;
}
return errorCount + 1;
}, 0),
delay(1000)
)));
}
在组件调用中,您可以使用handleRetry
:
this.http.post(url, {payload})
.pipe(this.handleRetry).sub.....
您也可以tap
进入错误,以根据状态码确定是否必须重试:
例如:
server.getData().pipe(
retryWhen(errors =>
errors.pipe(
delay(1000),
tap(errorStatus => {
if (!errorStatus.startsWith('5')) {
throw errorStatus;
}
console.log('Retrying...');
})
)
)
);