javascript - Firestore/Rxfire - 查询集合然后订阅子可观察数组

标签 javascript firebase asynchronous google-cloud-firestore rxjs

我在 firestore 中有一个保存消息的 chat 集合。每条消息都附加有一个userUid。我想要完成的任务如下:

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

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

  3. 拥有一个订阅,现在可以提供原始消息数组以及添加的信息

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

以下代码片段是我目前正在处理的内容:

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))

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

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

最佳答案

明白了!

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))

关于javascript - Firestore/Rxfire - 查询集合然后订阅子可观察数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61492280/

相关文章:

javascript - 用php获取jsFiddle结果iframe源码

php - 使用 uploadify 发送额外的字段数据

javascript - 格式化 JSON 以进行 Angular 数据绑定(bind)

firebase - Firebase Firestore中合并字段和合并字段之间的区别

c++ - 使 C++ 插件异步

asynchronous - Haxe - 如何为 Flash 目标实现异步等待

javascript - 如何在 Javascript 中将图像放入剪贴板?

javascript - 如何在特定用户id下存储数据? Angular 火力基地

ios - iOS 上 Firebase 崩溃报告的不可读错误(符号文件)

node.js - 限制nodejs中cassandra db的并行请求数量