Angular2 rxjs switchMap с внутренней подпиской на карту, испускающей несколько наблюдаемых - PullRequest
0 голосов
/ 13 июня 2018

У меня есть карта переключателей с функцией внутренней карты, которая возвращает несколько obersables, например, так:

  this.fb
    .getUsersGroupsAsObservable(user.uid, 'contacts')
    .switchMap(groups => {
      return groups.map(group => this.fb.getJobsbyGroup(group.id));
    })
    .subscribe(res => {
      console.log(res); // emits Observable {_isScalar: false, source: Observable, operator: MapOperator}
      this.job$ = res;
    });
});

Это выполняется дважды правильно и возвращает две наблюдаемые, например, так:

Observable {_isScalar: false, source: Observable, operator: MapOperator}
Observable {_isScalar: false, source: Observable, operator: MapOperator}

Есть ли способ вернуть список наблюдаемых (думая AngularFireList), который я затем могу визуализировать с помощью асинхронного канала?

Обновление: @concat помог мне получить ответ на этот вопрос (но по причине, что ответ былудален), я обновил свой код следующим образом (теперь он работает отлично):

  this.fb
    .getUsersGroupsAsObservable(user.uid, 'contacts')
    .switchMap(groups =>
      combineLatest(groups.map(group => this.fb.getJobsbyGroup(group.id))),
    )
    .subscribe(res => {
      console.log(res);
      this.jobs = [].concat.apply([], res);
    });

1 Ответ

0 голосов
/ 14 июня 2018

@ concat помог мне решить эту проблему, все, что мне нужно было сделать, - это использовать сочетании с последними, чтобы объединить все мои массивы в один массив, затем я сплющил этот массив, возможно, существует более простой способ сделать это, ноэй, это работает:

  this.fb
    .getUsersGroupsAsObservable(user.uid, 'contacts')
    .switchMap(groups =>
      combineLatest(groups.map(group => this.fb.getJobsbyGroup(group.id))),
    )
    .subscribe(res => {
      console.log(res);
      this.jobs = [].concat.apply([], res);
    });
...