iOS Firestore IsPersistenceEnabled不会禁用现有的缓存侦听器结果

罗尔夫·罗彻(Rolf Locher)

缓存通常会满足我们的第一个FireStore快照侦听器结果,几乎总是使用过时的数据(显然)。侦听器经常在此后立即再次触发并丢失结果。

使用FireStore设置将isPersistenceEnabled设置为false不会阻止缓存结果返回。我是否需要清除已经建立的缓存?

当检查snap.metadata.isFromCache时,缓存显然仍在运行。

在当前嵌入VC时禁用持久性没有任何作用(容器视图):

vc?.db = Firestore.firestore()
let settings = FirestoreSettings()
settings.isPersistenceEnabled = false
vc?.db?.settings = settings

一些代码:

var isFirstQuery = true
queuesInLocationRef?.remove()
queuesInLocationRef = db?.collection("location").whereField("city", isEqualTo: city).whereField("region", isEqualTo: region).addSnapshotListener({ (snapshot, error) in
    guard let snap = snapshot else {
         print("watch location err: ", error!)
         return
    }
    self.processDocumentChanges(documentChanges: snap.documentChanges, isFirstQuery: isFirstQuery)
    isFirstQuery = false
})

第一次开听者时,我有重要的事情要做。当我有Internet连接时,通常会首先使用陈旧的缓存结果来触发,因此我想排除在外。我尝试检查isFromCache并尽早返回,但发现即使建立了网络连接,最新的结果也可能会从缓存中返回。这导致侦听器不再触发。

如果缓存的结果再也不会回来,那就顺风顺水了。我不确定iOS SDK中的禁用持久性功能是什么,但这在这里无济于事。

道格·史蒂文森

通过告诉SDK传递元数据更改事件来解决您正在描述的内容确保彻底阅读该文档。

注册元数据更改时,如果元数据中的某些内容(包括数据源)发生更改(即使文档数据完全没有更改),则将调用回调。通过这种方法,您可以检查服务器上的数据是否绝对是最新的-snapshot.metadata.isFromCache应该返回false。

要请求元数据更改,请像这样调用addSnapshotListener

query.addSnapshotListener(includeMetadataChanges: true) { documentSnapshot, error in
    // ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自 iOS 后台的 Firestore 侦听器延迟

与Firestore侦听器分离

Firestore iOS DocumentSnapshot`createTime`

在 onAuthStateChanged 侦听器中分离 Firestore 侦听器

注销时退订Firestore侦听器

Firestore实时侦听器和成本

Firestore快照侦听器成本

React Hooks + Firebase Firestore onSnapshot-正确使用带有React Hooks的Firestore侦听器

Android Firestore 快照侦听器指标在没有事件侦听器的情况下注册

退出时是否有必要分离我的所有 Firestore 侦听器?

Android中的嵌套Firestore异步侦听器

我是否必须始终在Firestore中删除侦听器?

Firestore:在 OnDestroyView、OnStop 或 OnPause 中分离快照侦听器?

Flutter:何时激活 Firestore 文档/查询的侦听器

通过本地更改激活的Firestore快照侦听器的成本

Firestore - 集合的 React JS 实时侦听器

如何限制Firestore的onSnapshot侦听器返回的数据?

如何删除DocumentSnapshot事件的侦听器(Google Cloud FireStore)

Firestore快照侦听器:Recyclerview未更新

Firestore分页数据+快照侦听器

Firestore 查询侦听器可以“收听”云函数吗?

Firebase Firestore分离侦听器不起作用

在 Firestore onSnapshot 侦听器中访问反应状态的问题

从侦听器内部的Firestore检索数据的问题

如何从我的vuex动作中分离Firestore侦听器?

Firestore事件侦听器在容器内发生冲突

计算附加到 firestore 文档的侦听器数量

如何删除 SnapShot 侦听器 (Firestore - Swift)

使用 Swift 的 Firestore 中快照侦听器的范围