【发布时间】:2020-06-23 20:28:56
【问题描述】:
我正在尝试在 Angularfire(Angular 的 Firebase 库)中查找某个文档。我有一个 observable,它返回正确的文档 ID,我订阅了这个 observable 并使用里面的 ID 来获取文档上的所有数据,它也作为一个 observable 返回。
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。这是我订阅的第一个 observable。在此订阅中,我使用 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 方法总是返回一个 observable。如果我在任何订阅之外单独运行最里面的行,它将返回一个可观察的并完成我所需的行为。
【问题讨论】:
标签: angular typescript observable angularfire