Как преобразовать наблюдаемое из массива наблюдаемых данных в наблюдаемое из массива данных

Я новичок, делаю свой ионный проект с Firebase Firestore.
Будет два типа клиентов: группа A и группа B.
. Это приложение для социальных сетей, в котором люди из A могут дружить с людьми из B и наоборот, но не из одной группы.

Поскольку я запрашиваю данные для пользователя из группы A, в данных пользователя будут подключенные пользователи в группе B.

Итак, мой код выглядит следующим образом:

this.items = this.firestore.collection<Data>('a_users',ref => ref.where('UID','==',getUID()).valueChanges().map(
  users => users[0].conn.map(conn_id => {
    return this.firestore.collection<Data>('b_users', ref => ref.where('UID','==',conn_id)).valueChanges().map(b => b[0]);
  })
)

Он вернет Observable<Observable<Data>[]>, но когда я попытался отобразить в ion-list в HTML с помощью канала async, результатом стал #undefined.

Цель состоит в том, чтобы правильно отобразить вышеуказанные данные (с немедленным ответом при изменении элемента) в ion-list.

Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
2
0
104
1

Ответы 1

Думаю, вам нужно дважды использовать асинхронный канал, чтобы отобразить изменение данных.

this.items = this.firestore.collection<Data>('a_users',ref => ref.where('UID','==',getUID()).valueChanges().map(
  users =>users[0].conn.map(conn_id => {
    return this.firestore.collection<Data>('b_users', ref => ref.where('UID','==',conn_id)).valueChanges().map(b => b[0]);
  })
)

html

  <ion-list *ngFor = "let user of users | async"> 
     <strong> {user.props | async}</strong>
  </ion-list>

Второй map нельзя заменить на flatMap, потому что users[0].conn - нормальный массив.

S. Plum P. 10.01.2019 08:03

так вы хотите сгладить users [0] .conn как массив наблюдаемых?

Fan Cheung 10.01.2019 08:08

Нет, я хочу получить возвращаемое значение Observable<Data[]>.

S. Plum P. 10.01.2019 08:38

обновил ответ, чтобы создать плоское наблюдаемое, менее эффективно в вашем случае использования imho

Fan Cheung 10.01.2019 09:00

Вы можете попробовать разделить функции на две меньшие функции для отладки. 1-й запускаем с this.firestore.collection<Data>('a_users',ref => ref.where('UID','==',getUID()).valueChanges().map( users =>users[0].conn), посмотрим, получится ли результат.

Fan Cheung 10.01.2019 10:08

Другие вопросы по теме