Angular2 rxjs switchMap с подпиской на внутреннюю карту, излучающую несколько наблюдаемых

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

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

person rhysclay    schedule 13.06.2018    source источник


Ответы (1)


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

  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);
    });
person rhysclay    schedule 13.06.2018