在RxFire中使用switchMap和内部可观察对象时,如何避免冗余下载数据?

时间:2019-02-09 00:25:28

标签: firebase rxjs rxfire

我有一些RxFire代码,用于侦听Firestore集合查询(代表通道),并且对于每个结果,都侦听Realtime Database引用中的文档(代表 message

我遇到的问题是,每次Firestore查询更改时,都会重新下载实时数据库文档,即使它们是针对未更改的路径/引用的。

这是一些伪代码:

collection(channelsQuery).pipe(

  // Emits full array of channels whenever the query changes
  switchMap(channels => {

    return combineLatest(
      channels.map(channel =>

        // Emits the full set of messages for a given channel
        list(getMessagesRef(channel)),
      ),
    );
  })
)

想象一下以下情况:

  • 查询最初会发出 3 Firestore频道文档
  • 为这三个通道的相应实时数据库引用创建可观察对象,并发出其消息文档
  • 添加了一个与原始查询匹配的新Firestore文档,该文档现在发出 4 个渠道文档
  • 实时数据库的以前的可观测对象被破坏,并且为现在的 4 频道创建了新的观测对象,重新下载并释放了先前 3 已有的所有数据。 strong>。

显然,这不是理想的选择,因为它会导致实时数据库上出现大量冗余读取。在这种情况下,最佳做法是什么?请记住,删除频道后,我想破坏相应的可观察对象,switchMap已经这样做了。

0 个答案:

没有答案