From 1e6ebf252fa3be1704595d42dc621380a0d07ca0 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Mon, 4 Apr 2022 16:05:45 +0300 Subject: [PATCH] fix backoff on server error --- src/lib/error/server-error-interceptor.ts | 28 +++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/lib/error/server-error-interceptor.ts b/src/lib/error/server-error-interceptor.ts index 5bab388..4ac4dbb 100644 --- a/src/lib/error/server-error-interceptor.ts +++ b/src/lib/error/server-error-interceptor.ts @@ -1,7 +1,7 @@ import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpStatusCode } from '@angular/common/http'; import { Inject, Injectable, Optional } from '@angular/core'; -import { MonoTypeOperatorFunction, Observable, pipe, retry, throwError, timer } from 'rxjs'; -import { catchError, mergeMap, tap } from 'rxjs/operators'; +import { MonoTypeOperatorFunction, Observable, retry, throwError, timer } from 'rxjs'; +import { catchError, tap } from 'rxjs/operators'; import { MAX_RETRIES_ON_SERVER_ERROR } from './max-retries.token'; import { ErrorService } from './error.service'; import { KeycloakService } from 'keycloak-angular'; @@ -16,19 +16,19 @@ function updateSeconds(seconds: number) { function backoffOnServerError(maxRetries = 3): MonoTypeOperatorFunction> { let seconds = 0; - const timerExpiration = pipe( - tap(() => (seconds = updateSeconds(seconds))), - mergeMap((error: HttpErrorResponse, index) => { - if ((error.status < HttpStatusCode.InternalServerError && error.status !== 0) || index === maxRetries) { - return throwError(() => error); - } - console.error('An error occurred: ', error); - console.error(`Retrying in ${seconds} seconds...`); - return timer(seconds * 1000); - }), - ); - return retry({ delay: (errors: Observable) => errors.pipe(timerExpiration) }); + function delay(error: HttpErrorResponse) { + seconds = updateSeconds(seconds); + if (error.status < HttpStatusCode.InternalServerError && error.status !== 0) { + return throwError(() => error); + } + + console.error('An error occurred: ', error); + console.error(`Retrying in ${seconds} seconds...`); + return timer(seconds * 1000); + } + + return retry({ count: maxRetries, delay }); } @Injectable()