【发布时间】:2021-07-08 10:49:46
【问题描述】:
我正在尝试为 Firebase Firestore 使用文档快照侦听器。我想根据来自服务器的当前文档值执行一些操作,但还要监听文档的更改并在可能的情况下启用离线缓存。
侦听器会在文档更改时更新状态,但由于某种原因,它总是从以前的缓存中操作,以记录在侦听时更改的内容:
let unsub = firebase.firestore().collection('myCol').doc('myDoc').onSnapshot((doc) => {
if(doc.data().myVal) myFunction(); //myVal is always what the last listener thought it was, not updated from current server value
}
因此,如果我随后调用 unsub() 并在控制台中更改文档,则下次启动侦听器时,它将返回上次侦听时的缓存值,而不是第一次加载来自服务器。
如何强制监听器从服务器而不是旧的本地缓存中获取第一个值?
【问题讨论】:
-
你能试试
.onSnapshot({ includeQueryMetadataChanges: true }, (doc) => {}),通过记录`snapshot.metadata.fromCache`来检查数据源是否缓存? -
snapshot.metadata.fromCache记录为 true,添加元数据更改似乎没有帮助 -
你开启离线持久化了吗?
-
是的,使用
firebase.firestore().enablePersistence().catch((e) => {}); -
documentation 说,“如果你启用了离线持久化,当本地缓存的数据发生变化时,你的监听器会收到监听事件。”
标签: javascript firebase google-cloud-firestore