Angular 2 & RxJS: Subject.next 在某些情况下不工作

Angular 2 & RxJS: Subject.next not working in some cases

我有这项服务(authApiService.login() 工作正常,获得预期数据):

@Injectable({ providedIn: 'root' })
export class AuthService {
  private loggedIn: Subject<boolean> = new BehaviorSubject<boolean>(
    !this.isTokenExpired()
  );

  get isLoggedIn(): Observable<boolean> {
    return this.loggedIn.asObservable();
  }

  logout(): void {
    /* ... */
    this.loggedIn.next(false);
  }

  login(login: string, password: string): Observable<LoginResult> {
    return this.authApiService.login(login, password).pipe(
      map((result) => {
        if (result) {
          /* ... */
          this.loggedIn.next(true);
        }
        return result;
      })
    );
  }

}

以及以下组件函数(processLogin() 工作正常,无需订阅即可测试):

 ngOnInit(): void {
    this.loggedInSub = this.authService.isLoggedIn.subscribe(
      (loggedIn: boolean) => this.processLogin(loggedIn)
    );
  }

在我从我的应用程序注销后(从服务调用 logout()),此 .next() 实际上发出错误值并且组件内部订阅(在 ngOnInit() 中声明)有效。但是当我调用服务的 login() 方法时,调试器显示 this.loggedIn.next(true); 已执行,但组件内的订阅不执行提供的代码。我不知道为什么 logout() => next(false) 有效,而 login() => next(true) 无效。所有提到的没有实施的方法都经过测试并且工作正常。请帮忙!

编辑:

刚刚注意到 - login() => next(true) 不起作用,但页面刷新有效(页面在订阅中表现得像“true”)

2 个月后(总共 6 个月)我修好了它。这只是关于从模块提供者中删除 AuthService 。似乎不同的实例是在不同的模块中创建的。但我不是Angular专家,如果有人知道如何解释,请尝试。