首页 > 解决方案 > 订阅行为主题不返回新值

问题描述

我有一个会话详细信息端点,我想在我的应用程序启动时点击它,并且在获取任何此类详细信息之后,我想使用我的应用程序的其余组件可以在需要时检索的行为主题发出一些值。

我创建了一个会话详细信息服务,如下所示:

export class SessionDetailsService {

  public currentUser: BehaviorSubject<IUser> = new BehaviorSubject<IUser>(undefined);

  constructor(
    private http: HttpClient) {
  }

  public getSession = () => {
    return this.http.get<ISessionDetails>('http://localhost:8080/services/sessiondetails').subscribe((sessionDetails) => {
        this.currentUser.next(sessionDetails.user ? sessionDetails.user : undefined);
      });
  }
}

在我的根应用程序组件中ngOnit,我getSession在上述服务中调用我的方法。

这确实触发了 HTTP 请求,但是我发现当某个组件加载订阅currentUser行为主题时,它总是返回一个未定义的值,即使我可以通过调试看到 sessionDetails 响应参数上存在一个用户属性在我的 HTTP 获取订阅回调中,所以我希望this.currentUser.next(sessionDetails.user)已经进行了调用,以便我对这个值感兴趣的组件将获得完整的用户值。

在我对这个用户价值感兴趣的其他组件中,我订阅了 ngOnit,如下所示:

this.sessionDetailsService.currentUser.subscribe((currentUser) => {
      this.userPresent = currentUser !== undefined;
    });

如您所知,它只是设置一个标志,但始终设置为 false,因为通过的值仍未定义。

我觉得我在这里误解了一些基本的东西。

谁能协助并解释我哪里出错了?

谢谢。

标签: angularangular6

解决方案


推荐阅读