我正在尝试在Angularfire的Angularfire库中找到某个文档。我有一个可观察到的对象,它返回了正确的文档ID,我正在订阅该可观察对象,并使用内部的ID来获取文档上的所有数据,这也作为可观察对象返回。
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();
})
}
我目前对此的尝试首先是获取所需文档的ID。这是我订阅的第一个观察者。在此订阅中,我使用ID来获取嵌套的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
方法始终返回一个可观察值。如果我自己在所有订阅之外运行最里面的行,它将返回一个可观察到的内容,并且可以很好地完成我所需的行为。
答案 0 :(得分:2)
我认为switchMap
应该可以正常工作,但是您必须在函数中返回observable。
getSessions(date: firestore.Timestamp) {
// !! check out the first return here !!
return 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();
}))
}
...
this.getSessions(...).subscribe(data => { console.log(data) });