繁体   English   中英

在firestore中第一次查询快照和更改侦听器之间存在差异

[英]Differentate between first time querysnapshot and change listener in firestore

我在这里关注firestore的文档并尝试在集合上附加快照侦听器以获取实时更新。

我在尝试区分Snapshot事件侦听器的响应是第一次响应(在这种情况下是否将返回集合中的所有文档)或更改事件响应时遇到问题,在这种情况下我想添加检查确定发生了什么变化。 该脚注在同一文档中如下:

要点:第一个查询快照包含与查询匹配的所有现有文档的已添加事件。 这是因为您获得了一组更改,使您的查询快照与查询的初始状态保持同步

没有提到如何使用后续查询快照识别第一个查询快照。

我在SO上找到的相关问题就是这个问题,但在我的案例中没有用。

任何帮助都非常感谢,因为我已经没有方向去了。

谢谢。

仔细查看您引用的文档中的代码。 它正在检查QuerySnapshot对象中每个DocumentChange对象的类型

for (DocumentChange dc : snapshots.getDocumentChanges()) {
    switch (dc.getType()) {
        case ADDED:
            Log.d(TAG, "New city: " + dc.getDocument().getData());
            break;
        case MODIFIED:
            Log.d(TAG, "Modified city: " + dc.getDocument().getData());
            break;
        case REMOVED:
            Log.d(TAG, "Removed city: " + dc.getDocument().getData());
            break;
    }
}

这与您引用的文字一致:

第一个查询快照包含与查询匹配的所有现有文档的已添加事件。

您可以判断您是否第一次看到文档,因为它是一种ADDED类型的更改。 MODIFIED和REMOVED类型更改仅针对您之前为此侦听器看到的文档发出。

 // flag let flag = false; collectionRef.onSnapshot((snapshot) => { snapshot.docChanges().forEach((change) => { // NOTE: ctrl first execute if (!flag) { console.log('not initilized'); return; } // anything console.log('only after initilized'); }, (err) => { console.log(err); }); // set flag true if (!flag) { flag = true console.log('listener initilized!!'); }; }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM