如何解决当创建侦听器时,将调用Firestore“ ListenerRegistration”吗?
我在Firebase SDK中使用 Unity ,并使用了Firebase中的Auth和 Firestore 实用程序。
我可以从客户端对Firestore数据库进行各种操作,所以现在我尝试实现一些客户端挂钩,因此,当Firestore中的某些内容发生变化时,客户端将执行一个动作。
Firebase Documentation启发了我构建这些侦听器的方式,这是一个方法示例,用于在发生某些更改时将侦听器设置为Firestore集合:
//db == FirebaseFirestore.DefaultInstance;
public ListenerRegistration SetListenerToAllCollectionDocuments(string collectionID,Query query = null,Action OnSomeDocumentChange = null)
{
try
{
Query colRef = query ?? db.Collection(collectionID);
ListenerRegistration listener = colRef.Listen(colQuerySnapshot =>
{
Debug.Log("Listen changes on collection:" + collectionID);
OnSomeDocumentChange();
});
return listener;
}
catch (Exception e)
{
Debug.Log(e);
}
return null;
}
然后我可以这样称呼它:
ListenerRegistration listener = Database.SetListenerToAllCollectionDocuments("users",null,() => { Debug.Log("Something Change"); });
如果要禁用它,则具有侦听器引用。
到目前为止,很好,现在是问题:
当数据库中的某些内容发生更改时,将正确调用此侦听器,但是在设置侦听器时第一次调用方法SetListenerToAllCollectionDocuments();
时会被 ALSO 调用。
这应该是预期的行为吗?
在我头上,仅当Firestore上的某些内容发生更改时才应调用此函数,而在我创建侦听器时则不应调用。我做错了什么?谢谢。
解决方法
当您附加侦听器时,应该使用集合/查询中的所有现有数据来调用侦听器。
如果只想获取新数据/更新,则需要在应用程序代码中确保这一点。常见的方法是在每个文档中添加一个lastUpdated
时间戳,然后查询之后是lastUpdated
的项目。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。