Наблюдаемая цепочка применительно к объектам - PullRequest
0 голосов
/ 12 декабря 2018

Я новичок в Observables. Я не уверен, правильно ли я это делаю.

Вот сценарий.

a) Подписаться на параметры маршрута

b) При изменении параметров выполнить сервисный запрос для извлечения наблюдаемых данных

c) Обработать данные

d) Затем сделайте больше запросов об их зависимостях и извлеките их наблюдаемые зависимости.

Моя проблема в том, что после d) я могу получить их наблюдаемые зависимости, но у меня нет сопоставления с обработанными данными, чтобы прикрепить ответы по мере необходимости.

Пример:

this.route.queryParams.pipe(map((params) => {
  this.selectedTabIndex = +params['tabIndex'];
  return params
})).pipe(switchMap((params) => {
  return this.eventService.getEvent(params['eventID']);
})).pipe(map((event) => {
  this.event = event;
  this.selectedActivities = event.getActivities();
  return this.selectedActivities;
})).pipe(mergeMap((activities) => {
  return combineLatest(activities.map((activity) => {
    return this.eventService.getStreams(this.event.getID(), activity.getID(), ['Latitude', 'Longitude'])
  }))
})).pipe(map((activityStreams) => {
  // Here is my problem 
  // As you can see I can get well the streams for the above activities
  // But I don't have the activity that the streams belong to to attach them to
  debugger
})).subscribe()

Итак, на последнем канале результат выглядит так:

enter image description here

Но какВы можете видеть, что у меня нет ссылки на активность, к которой должен быть присоединен этот потоковый массив в конце.И это то, что я хочу сделать.

Возможно, я все делаю неправильно, поэтому я открыт для обсуждения.

1 Ответ

0 голосов
/ 12 декабря 2018

С небольшой помощью Шешая Авастхи

я сделал следующее:

this.route.queryParams.pipe(map((params) => {
  this.selectedTabIndex = +params['tabIndex'];
  return params
})).pipe(switchMap((params) => {
  return this.eventService.getEvent(params['eventID']);
})).pipe(map((event) => {
  this.event = event;
  this.selectedActivities = event.getActivities();
  return this.selectedActivities;
})).pipe(map((activities) => {
  return activities.reduce((activityStreamPairArray, activity) => {
    activityStreamPairArray.push({
        activity: activity,
        activityStreams: this.eventService.getStreams(this.event.getID(), activity.getID(), ['Latitude', 'Longitude']),
      });
    return activityStreamPairArray
  }, [])
})).pipe(mergeMap((activityStreamPairArray) => {
  return combineLatest(activityStreamPairArray.reduce((flattenedArray, activityStreamPair) => {
    flattenedArray.push(of(activityStreamPair.activity), activityStreamPair.activityStreams);
    return flattenedArray
  }, []))
})).pipe(map((test) => {
  debugger

}))

Теперь у меня есть

enter image description here

, который состоит из массива, в котором можно комбинировать каждые 2 элемента.

...