第1步:
假设我们有一个名为“chatLive”的集合
Firestore
它包含一些 docs
比如说 50K docs
第2步:
void chatLiveListner(){
FirebaseFirestore.instance
.collection('chatLive')
.where('isDeleted', isEqualTo: false)
.orderBy('timesTamp', descending: true)
.limit(10)
.snapshots()
.listen((event) {
// action
});
}
好吧,当我打电话
chatLiveListner()
时,我知道我会根据我的极限值获得最新的 10 个更新的 docs
.limit(10)
然后我知道如果有的话我将连续收到最新的 10 个文档
现在让我们想象一下,在同一个 (((session))) 或 (((侦听器的连接从未中断或重置))) 中,用户同时输入了数千个新文档。侦听器会跟踪所有这些文件并获得 10 x 10 的文件(无论快照编号或任何数字)。还是会“错过”除最后 10 个文档之外的所有文件?
“你可以想象它是在一个有数千条连续消息的聊天室中。”
不保证您会收到添加到集合中的每一个文档。使用侦听器获得的唯一保证是最新快照将包含满足查询当时的最新文档。如果查询结果在此之后发生变化,那么侦听器将最终收到一组新的查询结果,但不一定是自上一个快照以来可能发生更改的所有结果。
侦听器不会订阅对查询结果的一系列精确更改。侦听器订阅查询的最新文档集。在良好的网络条件下,您的听众可能会看到所有更改,但这并不能保证,特别是如果网络连接中断(即使是很短的中断),或者有太多更改需要观察。