2017-10-21 183 views
5

我开始使用Firestore。我已阅读关于脱机数据持久性的文档和教程,但我并不清楚Firestore是否再次下载数据(即使内容未被修改)。 例如,如果我有一个查询结果每周更新一次,而且我不需要应用程序再次下载内容,直到做出更改,那么编写代码的效率方面最好的方法是什么? 谢谢!Firestore - 使用缓存直到在线内容更新

回答

0

你想使用“快照监听器” API来听您的查询: https://firebase.google.com/docs/firestore/query-data/listen#listen_to_multiple_documents_in_a_collection

下面是一些JavaScript为例:

db.collection("cities").where("state", "==", "CA") 
    .onSnapshot(function(querySnapshot) { 
     var cities = []; 
     querySnapshot.forEach(function(doc) { 
      cities.push(doc.data().name); 
     }); 
     console.log("Current cities in CA: ", cities.join(", ")); 
    }); 

您将这个监听器第一次公司的FireStore将访问网络将所有结果下载到您的查询中,并为您提供查询快照,如您所期望的那样。

如果您再次附加同一个侦听器,并且您使用的是脱机持久性,则会立即使用缓存中的结果触发侦听器。这里是你如何可以检测,如果你的结果是从高速缓存或本地:

db.collection("cities").where("state", "==", "CA") 
    .onSnapshot({ includeQueryMetadataChanges: true }, function(snapshot) { 
     snapshot.docChanges.forEach(function(change) { 
      if (change.type === "added") { 
       console.log("New city: ", change.doc.data()); 
      } 

      var source = snapshot.metadata.fromCache ? "local cache" : "server"; 
      console.log("Data came from " + source); 
     }); 
    }); 

后你会得到高速缓存的结果,公司的FireStore将与服务器检查,看看是否有你的查询结果的任何变化。如果是的话,你会得到另一个快照的变化。

如果您希望收到更改只(如果没有文件改变,但snapshot.metadata.fromCache变化为例)包括元数据,你可以发出查询时使用QueryListenOptionshttps://firebase.google.com/docs/reference/android/com/google/firebase/firestore/QueryListenOptions