From 60d306f9c92fab73463649d9f4da231631e51f0e Mon Sep 17 00:00:00 2001 From: Polianin Nikita Date: Mon, 26 Aug 2024 01:24:57 +0300 Subject: [PATCH] fix: unsubscribe from listening to refresh token --- src/api/api.service.ts | 4 +++- src/services/token-refresh.service.ts | 8 +++----- 2 files changed, 6 insertions(+), 6 deletions(-) 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); }); }