Вложенная подписка rxjs с использованием свойств из родительского элемента для формирования единой наблюдаемой - PullRequest
0 голосов
/ 14 мая 2019

У меня есть подписка верхнего уровня, которая возвращает один объект. Объект содержит свойство, которое является массивом идентификаторов. Мне нужно иметь возможность затем получать дополнительную информацию, используя эти идентификаторы, и возвращать полный объект, содержащий родительскую информацию, вместе с недавно извлеченной дочерней информацией.

Я ломал голову, пытаясь выяснить это с помощью 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 голосов
/ 14 мая 2019

Я думаю, что я создаю ниже, это чисто.

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;
})
...