如果HTTP错误代码为500,则按角度重新尝试API请求

时间:2019-02-08 17:30:36

标签: angular rxjs httpclient

我正在尝试以

的方式向我的API调用添加一个简单的HTTP重新尝试
this.http.post(url, {payload})
    .pipe(retry(3)).sub.....

如何添加以下情况?

  1. 仅3次重新尝试
  2. 每隔1秒
  3. 仅当HTTP错误代码为500时

1 个答案:

答案 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...');
      })
    )
  )
);