Я не понимаю полный контекст вашего вопроса, но вижу потенциальную проблему в этом фрагменте кода
get isLoggedIn(): Observable<boolean> {
this.loggedIn.next(this.tokenIsValid());
return this.loggedIn.asObservable();
}
Здесь, кажется, вы пытаетесь сделать 2 вещи
- Сначала вы уведомляете, если пользователь вошел в систему с
this.loggedIn.next(this.tokenIsValid())
- Затем вы возвращаете
Subject
(как Observable
), используемый для передачи всем заинтересованным сторонам вышеуказанного уведомления
Дело в том, что каждая сторона (например, ваш AuthGuard), которая хочет получать уведомления, когда что-то происходит first , должна подписаться на Observable, в котором она заинтересована, и только затем он получает любое уведомление, когда выходит Наблюдаемая.
Это означает, что вы должны найти способ для вашей заинтересованной стороны сначала подписаться на loggedIn
как Наблюдаемая с чем-то вроде
get isLoggedIn(): Observable<boolean> {
return this.loggedIn.asObservable();
}
и только тогда найдите подходящее место, чтобы loggedIn
испустить что-либо через this.loggedIn.asObservable()
.
Если, скорее, смысл в том, что вы хотите получать уведомление о событии, даже если оно произошло быть Для подписки вы должны использовать ReplySubject, а не BehaviorSubject.