Возвращая of(this.user)
из метода getUser()
, все, что вы делаете, это возвращаете наблюдаемое с одним излучением, которое является значением this.user
во время вызова.
Если вы хотите, чтобы поток обновлялся каждый раз, когда пользователь обновляется при входе в систему, тогда лучший способ сделать это - использовать Subject . Субъект - это наблюдаемый объект, выбросы которого могут быть установлены извне.
Возможно, вы захотите использовать специальный субъект под названием BehaviorSubject , который будет выдавать последнее значение, как только оно будет подписано. , Таким образом, если логин уже был вызван после подписки на наблюдаемое, то текущее значение все равно будет возвращено. Это эквивалентно обычной наблюдаемой с startWith и shareReplay оператором.
export class AuthService extends AbstractRestService<any> {
private readonly userSubject = new BehaviorSubject<{ id: string }>();
login(userName: string, password: string) {
return this.http
.post('/auth/login')
.pipe(
tap(res => userSubject.next(res)),
catchError(this.handleError)
);
}
getAppUser() {
/** do other work **/
return this.userSubject.asObservable();
}
}
Лично я бы просто назначил переменную напрямую, выставив userSubject
как поле только для чтения, используя this.userSubject.asObservable()
. Поскольку вы указали, что в getAppUser()
есть дополнительные логи c, вы можете просто выполнить тот же вызов в методе.