diff --git a/src/api/api.service.ts b/src/api/api.service.ts index 5c9cfd0..d0933d8 100644 --- a/src/api/api.service.ts +++ b/src/api/api.service.ts @@ -1,4 +1,4 @@ -import {catchError, filter, mergeMap, Observable, retryWhen, switchMap, timer} from "rxjs"; +import {catchError, distinctUntilChanged, filter, first, mergeMap, Observable, retryWhen, switchMap, timer} from "rxjs"; import {HttpClient, HttpErrorResponse} from "@angular/common/http"; import {NotifyColor, OpenNotifyService} from "@service/open-notify.service"; import {environment} from "@environment"; @@ -94,7 +94,9 @@ export default abstract class ApiService { private makeHttpRequest(method: 'get' | 'post' | 'delete' | 'put', request: RequestData): Observable { if (request.needAuth) return this.tokenRefreshService.getTokenRefreshing$().pipe( + distinctUntilChanged(), filter(isRefreshing => !isRefreshing), + first(), switchMap(() => { const token = localStorage.getItem(ApiService.tokenKey); diff --git a/src/services/token-refresh.service.ts b/src/services/token-refresh.service.ts index bfcd2ee..1faac11 100644 --- a/src/services/token-refresh.service.ts +++ b/src/services/token-refresh.service.ts @@ -26,23 +26,21 @@ export class TokenRefreshService { } private refreshToken(): void { - if (this.tokenRefreshing$.value) { + if (this.tokenRefreshing$.value) return; - } this.tokenRefreshing$.next(true); this.authService.refreshToken() .pipe( - catchError(error => { + catchError(_ => { localStorage.removeItem(ApiService.tokenKey); this.refreshTokenExpireMs = -1; return of(undefined); })) .subscribe(data => { - if (data) { + if (data) this.setRefreshTokenExpireMs(data); - } this.tokenRefreshing$.next(false); }); }