Есть сервис user.service.ts, в котором есть метод:
loadUserData(): Observable<any> {
const url = this.host + '/v1/user';
return this.http.get(url, httpOptions);
}
В компонентах где требуется получить текущего пользователя приходится делать:
userService.loadUserData().subscribe(
data => {
this.currentUser = new User(data);
}
);
Хочу избавится от постоянного запроса пользователя через апи. Есть два варианта:
1) Закинуть пользователя в локалстораж и уже оттуда получать через тот user.service.ts - мне не нравится этот вариант, т.к. хотелось бы не при логине получать пользователя, а каждый раз при заходе на сайт.
2) Получать пользователя при входе на сайт и класть в статическую переменную, а при запросе отдавать.
Но не выходит. Модифицировал сервис так:
constructor(protected http: HttpClient) {
super(http);
if (UserService.currentUser == null) {
this.loadUserData().subscribe(
data => {
UserService.currentUser = new User(data);
},
);
}
}
Но когда компонент запрашивает в первый раз пользователя через this.user = UserService.currentUser; То получает null, т.к. в переменной еще ничего не содержится а конструктор с обращением к апи может выполняться неопределенно долго. Как правильно решить задачу? Какой бестпрактикс? Задача вроде распространенная. Использовать callback ?