Я пытаюсь найти определенный документ в Angularfire, библиотеке Firebase для Angular. У меня есть наблюдаемая, которая возвращает правильный идентификатор документа, и я подписываюсь на эту наблюдаемую и использую идентификатор внутри для извлечения всех данных в документе, который также возвращается как наблюдаемая.
getSessions(date: firestore.Timestamp) {
this.db.collection('days', ref => ref.where('date', '==', date)).snapshotChanges().subscribe(docRef => {
return this.db.collection('days').doc(docRef[0].payload.doc.id).collection('sessions').valueChanges();
})
}
Моя текущая попытка это, во-первых, получить идентификатор документа, который я хочу. Это приходит в первую заметку, на которую я подписываюсь. Внутри этой подписки я использую идентификатор для получения вложенной коллекции sessions
. this.db.collection('days').doc(docRef[0].payload.doc.id).collection('sessions').valueChanges();
получает именно то, что мне нужно, но если я попытаюсь вернуть это, метод получения получит только значение undefined
. Это кажется мне асинхронной проблемой.
Я видел несколько постов, в которых предлагалось использовать switchMap
, но мои попытки сделать это тоже не сработали.
getSessions(date: firestore.Timestamp) {
this.db.collection('days', ref => ref.where('date', '==', date)).snapshotChanges().pipe(switchMap(docRef => {
return this.db.collection('days').doc(docRef[0].payload.doc.id).collection('sessions').valueChanges();
}))
}
Для справки метод collection
всегда возвращает наблюдаемое. Если бы я сам запустил самую внутреннюю строку, вне каких-либо подписок, она вернула бы наблюдаемое и полностью завершила бы мое требуемое поведение.