Javascript订阅结果子列表未定义

时间:2018-10-14 10:09:04

标签: javascript angular rxjs observable subscription

在我的仪表板应用程序中,我具有以下数据结构: 项目->仪表板->等。因此,这意味着project对象继承了dashboard对象的列表。当用户登录时,将加载并观察项目数据,以便不同的组件可以访问项目数据。但是现在,当我尝试访问订阅中项目的特定仪表板时,出现了未定义的错误。我的订阅如下:

ngOnInit(): void {

    this.dataService.projectData
      .subscribe((project: Project) => {
        this.project = project;
        console.log('Project', project);
        let d: Dashboard = project.dashboards[0];

        this.currentDashboardId = project.dashboards[0].id;
        this.dataService.changeCurrentDashboardId(this.currentDashboardId);
        this.currentSheetId = project.dashboards.find(x => x.id === this.currentDashboardId).sheets[0].id;
        this.dataloaded = true;
    });
}

打印的日志“项目”甚至可以正确显示对象。但是稍后访问仪表板时一行显示undefined。无法解释原因。也许你们每个人都知道并且可以告诉我原因。我很感激。预先感谢。

1 个答案:

答案 0 :(得分:0)

使用first()运算符来确保恢复数据,console.log有点棘手,它没有显示正确时间发生了什么, 您的代码如下:

this.dataService.projectData
.pipe(first())
.subscribe((project: Project) => {
  // your code is here
});

您也可以使用Filter()等待响应中的特定值

this.dataService.projectData
.pipe(filter(project) => project.somevalue !== undefined)
.subscribe((project: Project) => {
  // your code is here
});