Я устанавливаю срок действия токена в локальном хранилище, используя модуль локального углового асинхронного хранения.
import { AsyncLocalStorage } from 'angular-async-local-storage';
const expiresAt = JSON.stringify((authResult.expiresIn * 1000) + new Date().getTime());
this.localStorage.setItem('expires_at', expiresAt).subscribe(() => {});
У меня есть функция, которая вызывается при входе пользователя в систему, которая проверяет, чтобы увидетьесли токен все еще действителен:
get isAuthenticated(): boolean {
let res;
this.localStorage.getItem('expires_at')
.subscribe((val) => {
let expiresAt = JSON.parse(val);
res = (expiresAt && this.loggedIn) ? (new Date().getTime() < expiresAt) : false;
});
return res;
}
Проблема здесь в том, что localStorage.getItem () возвращает Observable.поэтому, когда мы вызываем .subscribe для наблюдаемой, она вызывается асинхронно, что означает, что мы не блокируем, пока результат не будет готов, поэтому код просто проходит напрямую и выполняет инструкцию return res, которая в этой точке res не определена, так каккод в функции стрелки подписки еще не выполнен, потому что результат не готов.
Итак, мне нужен совет, как лучше всего решить эту проблему?Один из подходов, о котором я подумал, состоял в том, чтобы попытаться заблокировать, пока результат не будет готов, но это выглядит как анти-паттерн, учитывая, что мы используем локальный модуль хранения ASYNC.Но, может быть, мне нужен простой синхронный модуль локального хранилища?Или это считается плохой практикой?Любая помощь будет большой благодарностью!