从订阅内部返回一个可观察对象?
Returning an observable from inside a subscription?
我正在尝试在 Angularfire(Angular 的 Firebase 库)中查找某个文档。我有一个 Observable,它 return 是正确的文档 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。这是我订阅的第一个可观察对象。在此订阅中,我使用 ID 获取嵌套的 sessions
集合。 this.db.collection('days').doc(docRef[0].payload.doc.id).collection('sessions').valueChanges();
得到我需要的东西,但如果我尝试 return 这个,接收方法将只会得到一个 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
方法总是 return 是一个可观察的。如果我 运行 最里面的行本身,在任何订阅之外,它将 return 一个可观察的并完成我需要的行为就好了。
我认为 switchMap
应该可以正常工作,但是您必须 return 函数中的可观察对象。
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) });
我正在尝试在 Angularfire(Angular 的 Firebase 库)中查找某个文档。我有一个 Observable,它 return 是正确的文档 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。这是我订阅的第一个可观察对象。在此订阅中,我使用 ID 获取嵌套的 sessions
集合。 this.db.collection('days').doc(docRef[0].payload.doc.id).collection('sessions').valueChanges();
得到我需要的东西,但如果我尝试 return 这个,接收方法将只会得到一个 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
方法总是 return 是一个可观察的。如果我 运行 最里面的行本身,在任何订阅之外,它将 return 一个可观察的并完成我需要的行为就好了。
我认为 switchMap
应该可以正常工作,但是您必须 return 函数中的可观察对象。
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) });