2017-10-21 182 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