【问题标题】:How to convert observable of array of observables of data into observable of an array of data如何将可观察数据数组的可观察数据转换为可观察数据数组
【发布时间】:2019-06-04 15:00:50
【问题描述】:

我是一名初学者,正在使用 Firebase Firestore 进行我的 Ionic 项目。
将有两种类型的客户,A 组和 B 组。
这是一个社交媒体应用程序,来自 A 的人可以成为来自 B 的朋友,反之亦然,但不能来自同一组。

当我查询A组用户的数据时,用户的数据中会有B组连接的用户。

所以我的代码是这样的:

this.items = this.firestore.collection<Data>('a_users',ref => ref.where('UID','==',getUID()).valueChanges().map(
  users => users[0].conn.map(conn_id => {
    return this.firestore.collection<Data>('b_users', ref => ref.where('UID','==',conn_id)).valueChanges().map(b => b[0]);
  })
)

它将返回Observable&lt;Observable&lt;Data&gt;[]&gt;,但是当我尝试使用async 管道在HTML 中显示ion-list 时,结果是#undefined

目标是在ion-list 中正确显示上述数据(当项目更改时立即响应)。

【问题讨论】:

    标签: firebase ionic-framework ionic3 rxjs google-cloud-firestore


    【解决方案1】:

    认为您必须使用两次异步管道才能映射到数据更改

    this.items = this.firestore.collection<Data>('a_users',ref => ref.where('UID','==',getUID()).valueChanges().map(
      users =>users[0].conn.map(conn_id => {
        return this.firestore.collection<Data>('b_users', ref => ref.where('UID','==',conn_id)).valueChanges().map(b => b[0]);
      })
    )
    

    html

      <ion-list *ngFor="let user of users | async"> 
         <strong> {user.props | async}</strong>
      </ion-list>
    

    【讨论】:

    • 第二个map不能改成flatMap,因为users[0].conn是一个普通数组。
    • 所以你想将 users[0].conn 扁平化为 observables 数组?
    • 不行,我要实现Observable&lt;Data[]&gt;的返回值。
    • 更新了答案,在您的用例 imho 中,生成一个平面的 observable 效率较低
    • 您可以尝试将函数分成两个较小的函数以便调试。第一次从this.firestore.collection&lt;Data&gt;('a_users',ref =&gt; ref.where('UID','==',getUID()).valueChanges().map( users =&gt;users[0].conn) 开始,看看有没有结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多