объединить 2 наблюдаемые в 1 с условием в angular - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть приложение ioni c - angular, которое загружает 2 наблюдаемые из Google Firestore.

Observable A возвращает массив объектов (группа). Observable B возвращает массив объектов (контактов).

group = [ name: string, adminID: string ]
contact = [ name: string, userID: string ]

Теперь я хочу объединить эти две подписки со следующим условием:

if ( group.adminID = contact.userID ) {
   group.adminData = contact
}

и вернуть это как один массив.

Я попробовал это с объединением, но я действительно новичок с rx js и не нашел решения. Я также не уверен, что считается, что функция подходящей для этого случая является подходящей, но я думаю, что это не сложная задача для профессионалов!

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Поскольку вы используете Observables , вы можете использовать Pipe , а затем Map для объединения двух массивов

https://rxjs-dev.firebaseapp.com/guide/operators

Может быть, этот ответ поможет вам:

Отображение между двумя массивами наблюдаемых классов

0 голосов
/ 27 февраля 2020

Вы можете использовать zip.

Observable.zip(groupObservable, contactObservable).subscribe(
  ([group, contact]) => {
    if ( group.adminID = contact.userID ) {
      group.adminData = contact
    }
  }
);

В зависимости от ваших требований вы также можете использовать combineLatest. Разница в том, что zip ждет, пока все наблюдаемые не передадут значение, прежде чем нажать его, combineLatest выдаст новые значения *, даже если одно из наблюдаемых испускает значение, учитывая, что обе наблюдаемые уже выпустили хотя бы одно значение .

...