我正盯着和Firestore一起玩,到目前为止一直很好,但我不知道如何从不同的查询中检索文档并将它们分配给一个Observable,所以我的模板会自动更新。
我有一个行程集合,其中有一个 passenger 集合,用于存储每位乘客的用户ID。此ID将用于检索配置文件信息。
经过一段时间的实验,我用一个简单的数组实现了我想要的结果并推送了每个文档的数据。这是代码:
passengersIDs: AngularFirestoreCollection<{}>
passengers = []
this.passengersIDs =this.db.collection('trips').doc(this.id).collection('passengers')
this.passengersIDs.ref.get().then(data => {
data.forEach(docu => {
this.db.collection('profiles').doc(docu.get('passID')).ref.get().then(prof => {
this.passengers.push(prof.data())
})
})
})
正如您在每个文档中看到的那样,我保存数据,然后在模板上迭代它。
我想用passengers = Obvserbale<Profile[]>
或类似的东西来实现相同的行为。
我检查了angularfire2和firestore documentation,但他们没有帮助。
欢迎任何帮助:)
答案 0 :(得分:0)
使用rxjs Observable.fromPromise
,您可以将您的承诺转换为Observable,并使用其他rxjs函数来实现您的目标。
例如:
passenger: Observable < Profile[] > =
Observable.fromPromise(this.db.collection('trips').doc(this.id).collection('passengers'))
.pipe(switchMap(passengers =>
// combine the array of observables to an observable of array of results
combineLatest( // mapping the passengers array to an Observable<Profile> array
passengers.map(p =>
Observable.fromPromise(this.db.collection('profiles').doc(p.passID))
)
)
)
);