缓存第一次实现for fire in firestore

时间:2018-06-11 09:19:52

标签: javascript firebase google-cloud-firestore

我希望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);
    });

然而,无论我设置“缓存”还是“服务器”,查询似乎首先尝试网络,然后是缓存。

1 个答案:

答案 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) {
        ...

但请注意,这意味着您永远不会从服务器获取更新的值。