rxjs使用来自父级的属性嵌套订阅以形成单个可观察的

时间:2019-05-14 14:34:28

标签: angular rxjs observable

我有一个返回单个对象的顶级订阅。该对象包含一个属性,该属性是一个id数组。 然后,我需要能够使用这些ID来获取更多信息,并返回一个包含父信息以及新获取的子信息的完整对象。

我竭尽全力试图通过switchMaps,flatMaps等来解决这个问题,但是似乎无法正确地确定顺序。 我可以简单地在订阅中添加一个forEach / for,但是我想要一个更优雅的解决方案。

让我们打个电话

this.reports.getSpace(spaceId)

此调用返回类型为space的可观察对象,如下所示:

{
  id: "1",
  title: "my space"
  dashboards: [{
    id: "7"
  },
  {
    id: "8"
  }]
}

我需要为空白处的每个仪表板调用以下内容

this.reports.getDashboard(dashboardId)

我希望能够返回一个包含空间信息和充实的仪表板信息的可观察结果。 新对象可能返回元(空间信息)和仪表板。但是对我而言,我无法弄清楚如何通过一系列订阅来维护空间信息。我只剩下仪表板信息了。

1 个答案:

答案 0 :(得分:0)

我认为我在下面创建的内容很干净。

this.reports.getSpace(spaceId).then(obj => {
    obj.dashboards.forEach((child,i) => {
        this.reports.getDashboard((""+child.id).then(res => {
            objs.dashboards[i] = res;
        });
    });
    // not a copy - only pointer in memory
    this.data = obj;
})