Я думаю, это то, что вы хотели бы сделать:
//get all event ids for a particular user
this.eventsRef = db.list(`eventsGuestsLookup/${this.id}`)
this.events = this.eventsRef.snapshotChanges().pipe(
map(changes =>
changes.map(c => (c.payload.key))
)
)
this.events
.pipe(
switchMap(eventKeys => {
eventObservables = eventKeys.map(eventKey => this.getEvent(eventKey));
return combineLatest(eventObservables);
})
)
.subscribe(data => {
// Do whatever you want to do
});
getEvent(eventid: string) {
return this.db.object(`/events/${eventid}`).valueChanges();
}
- Использование switchMap для перехода к другой наблюдаемой
- Использование eventKeys.map для просмотра всех ключей событий и запроса изменений значений для каждого из них.
- Используйте функциюlateLatest (), чтобы сгруппировать все наблюдаемые события в одну наблюдаемую.
Упрощенная версия всего этого может быть:
//get all event ids for a particular user
db.list(`eventsGuestsLookup/${this.id}`).snapshotChanges()
.pipe(
switchMap(changes => {
eventObservables = changes.map(c => this.db.object(`/events/${c.payload.key}`).valueChanges());
return combineLatest(eventObservables);
})
);