【问题标题】:How to assign several Firestore queries to an Observable?如何将多个 Firestore 查询分配给 Observable?
【发布时间】:2018-04-21 20:57:49
【问题描述】:

我正盯着Firestore 玩,到目前为止一切都很好,但我陷入了如何从不同的查询中检索文档并将它们分配给一个 Observable,因此我的模板会自动更新。

我有一个 trips 集合,其中有一个 passengers 集合,其中存储了每个乘客的用户 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&lt;Profile[]&gt; 或类似的东西。

我检查了angularfire2firestore documentation,但它们没有帮助。

欢迎任何帮助:)

【问题讨论】:

    标签: angular typescript firebase google-cloud-firestore


    【解决方案1】:

    使用 rxjs Observable.fromPromise,您可以将您的 Promise 转换为 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))
                                )
                        )
                    )
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2022-01-24
      • 2017-03-11
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2018-09-16
      相关资源
      最近更新 更多