Подписка на AngularFire Rxjs - возвращает нулевые результаты - PullRequest
0 голосов
/ 05 июня 2019

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

Вот мой код:

this.fb
  .getUsersGroupsAsObservable(user.uid, groupType) // first get the users groups
  .subscribe(groups => {
    combineLatest( // for each group get the jobs belonging to that group
      groups.map(group => this.fb.getJobsbyGroup(group.id)),
    ).subscribe(res => { // if there is no results this wont execute
      this.jobs = [].concat.apply([], res);
    });
  });

В идеале было бы хорошо, если бы я мог определить, что getJobsbyGroup не возвращает никаких результатов, и вернуть пустой массив. Извините, если это не правильно сформулировано, я не совсем уверен в терминологии, необходимой в этом случае.

1 Ответ

0 голосов
/ 05 июня 2019

Можете ли вы проверить, это то, что вы ищете? ссылка . Это суть. Вы можете проверить, есть ли у this.fb.getJobsbyGroup результат, а затем вернуть результат, иначе вернуть неопределенный.

  this.fb.getUsersGroupsAsObservable(user.uid, groupType)
.pipe(map(groups => groups.map(group => group.id)),
switchMap(groupIds => from(groupIds).pipe(mergeMap(id => this.fb.getJobsbyGroup(id).pipe(map(jobs => jobs ? jobs : []))),toArray())))
.subscribe()

Код Объяснение: Из групп выделите groupIds в отдельный массив. Затем одновременно вызовите getJobsbyGroup и проверьте, есть ли результат, или верните пустой массив. Затем объедините их результаты в отдельный массив и верните его. Дайте мне знать, было ли это то, что вам нужно.

...