我希望firestore每次都从缓存中获取数据。 根据Firestore文档,传递“cache”或“server”选项必须启用相同的功能。以下示例
db.collection("cities").where("capital", "==", true)
.get("cache")
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
然而,无论我设置“缓存”还是“服务器”,查询似乎首先尝试网络,然后是缓存。
答案 0 :(得分:3)
由于get()
只获得一次值,因此它将始终检查来自服务器的数据的最新值。如果这是您应用中的第一个Firestore操作,则可能需要它建立与数据库的网络连接,这可能需要一些时间。
如果您想快速从缓存中获取数据,然后稍后从服务器获取修改,请使用onSnapshot
:
db.collection("cities").where("capital", "==", true)
.onSnapshot(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
另见Firestore documentation on getting realtime updates
要告诉get()
从缓存中返回数据,请执行以下操作:
db.collection("cities").where("capital", "==", true)
.get({ source: 'cache' })
.then(function(querySnapshot) {
...
但请注意,这意味着您永远不会从服务器获取更新的值。