Abh*_*ava 0 httpclient rxjs angular
我正在尝试向我的 API 调用添加一个简单的 HTTP 重新尝试,如下所示
this.http.post(url, {payload})
.pipe(retry(3)).sub.....
Run Code Online (Sandbox Code Playgroud)
如何添加以下案例?
您可以使用retryWhenRxJS 重试任何请求。下面是在抛出错误之前尝试 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)
)));
}
Run Code Online (Sandbox Code Playgroud)
在组件调用中您可以使用handleRetry :
this.http.post(url, {payload})
.pipe(this.handleRetry).sub.....
Run Code Online (Sandbox Code Playgroud)
您还可以tap进入错误以根据状态代码决定是否需要重试:例如:
server.getData().pipe(
retryWhen(errors =>
errors.pipe(
delay(1000),
tap(errorStatus => {
if (!errorStatus.startsWith('5')) {
throw errorStatus;
}
console.log('Retrying...');
})
)
)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1700 次 |
| 最近记录: |