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