【问题标题】:Firestore/Rxfire - Query collection then subscribe to array of sub observablesFirestore/Rxfire - 查询集合然后订阅子 observables 数组
【发布时间】:2020-08-12 23:30:36
【问题描述】:

我在 Firestore 中有一个 chat 集合,其中包含消息。每条消息都附有一个userUid。我想要完成的是:

  1. chat 集合中查询每条消息的数组

  2. 遍历每条消息,查询对应的用户文档 为了将用户信息附加到消息中

  3. 现在有一个 subscribe 提供原始消息数组以及添加的信息

  4. (如果可能 - combineLatest?)每次添加消息时,最好只在用户集合中查询新消息

以下 sn-p 是我目前正在使用的:

const chatRef = db.collection('chat')
const messageUser$ = collectionData(chatRef, 'id')
    .pipe(
        switchMap(messages => {
            return forkJoin(...messages.map(m => {
                const userRef = db.collection('users').doc(m.userUid)
                return docData(userRef)
                    .pipe(
                        map(user => ({ ...user, ...m }))
                    )
            }))
        })
    )
messageUser$.subscribe(data => console.log('data', data))

我和朋友一起提出了以下两个可行的解决方案,但在为我的应用程序配置时都不起作用

https://stackblitz.com/edit/rxjs-nzn11o

【问题讨论】:

    标签: javascript firebase asynchronous google-cloud-firestore rxjs


    【解决方案1】:

    知道了!

    collectionData(db.collection('chat'))
        .pipe(
            switchMap(messages =>
                combineLatest(
                    messages.map(m =>
                        docData(db.collection('users').doc(m.userUid)).pipe(
                            map(user => ({ ...user, ...m }))
                        )
                    )
                )
            )
        )
        .subscribe(enhancedMessages => console.log(enhancedMessages))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多