2

我有一些 RxFire 代码可以侦听 Firestore 集合查询(表示channels),并且对于每个结果,侦听 Realtime Database ref 以获取文档(表示该通道中的消息)。

我遇到的问题是每次 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 通道文档
  • Observables 是为这 3 个通道的相应实时数据库 refs 创建的,它们发出它们的消息文档
  • 添加了一个与原始查询匹配的新 Firestore 文档,该查询现在发出4 个通道文档
  • Realtime Database 之前的 observable 被销毁,并为现在的4个通道创建新的,重新下载并发出之前3已经拥有的所有数据。

显然这并不理想,因为它会导致实时数据库上的大量冗余读取。在这种情况下,最佳做法是什么?请记住,当一个通道被删除时,我想销毁相应的 observable,它switchMap已经这样做了。

4

0 回答 0