Объедините несколько потоков сбора данных angularfire2 в один наблюдаемый - PullRequest
0 голосов
/ 19 сентября 2019

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

Вот что я сделал до сих пор

const groups = this.afs.collection(`users/${uid}/groups`).snapshotChanges().pipe(
  map(actions => actions.map(a => {
    const data = a.payload.doc.data();
    const customResId = a.payload.doc.id;
    return { uid: customResId, ...data };
  }))
);

const inGroups =  this.afs.collection(`users/${uid}/inGroups`).snapshotChanges().pipe(
  switchMap(actions => combineLatest(
    actions.map(a => {
      const data = a.payload.doc.data();
      return this.afs.doc(`users/${data['ownerId']}/groups/${data['groupId']}`).snapshotChanges().pipe(
        map(actions => {
          const data2 = actions.payload.data();
          const customResId = actions.payload.id;
          return { uid: customResId, ...data2 };
        })
      );
    })
  ))
);
 const joinedList = combineLatest(groups, inGroups);
 return joinedList;

Моя каждая коллекция groups и inGroups возвращаются правильноданные, но мне не удалось объединить оба и получить один поток.

вот мой код компонента для получения групп

if (this.user.uid) {
    this.groups$ = this.groupService.getAllGroups(this.user.uid)
    .pipe(
      map(changes => {
        return changes.map(a => {
          const data = a as any;
          Object.keys(data).filter(key => data[key] instanceof Timestamp)
              .forEach(key => data[key] = data[key].toDate());
          return data;
        });
      })
    );
  }

* С приведенным выше кодом это работает, когда у пользователя есть обе коллекции, скажемПользователь создал группы, и он входит в другие группы, если у пользователя есть только коллекция групп, он ничего не возвращает.*

Пожалуйста, помогите.

...