web-dev-qa-db-fra.com

Différence entre get () et snapshot () dans Cloud Firestore

Je lis des données du Cloud Firestore de Firebase mais j'ai vu plusieurs façons de le faire. L'exemple que j'ai vu utilise la fonction get et onSnapshot comme ceci:

db.collection("cities").doc("SF")
 .onSnapshot(doc => {
      console.log(doc.data());
 });

ou ca

var docRef = db.collection("cities").doc("SF");

docRef.get().then(doc => {
    if (doc.exists) {
         console.log("Document data:", doc.data());
    } else {
         console.log("No such document!");
    }
}).catch(function(error) {
   console.log("Error getting document:", error);
        });

Y a-t-il une différence entre eux?

11
rubotero

Comme expliqué dans le doc :

Il existe deux façons de récupérer des données stockées dans Cloud Firestore. L'une ou l'autre de ces méthodes peut être utilisée avec des documents, des collections de documents ou les résultats de requêtes:

  • Appelez une méthode pour obtenir les données.
  • Définissez un écouteur pour recevoir les événements de changement de données.

Lorsque vous définissez un écouteur, Cloud Firestore envoie à votre écouteur un instantané initial des données, puis un autre instantané à chaque fois que le document change.

Lorsque vous utilisez get() vous "récupérez le contenu d'un seul document" une seule fois . C'est une sorte de "faire et oublier": si le document change dans la base de données Firestore (back-end), vous devrez appeler à nouveau get() pour voir le changement.

Au contraire, si vous utilisez la méthode onSnapshot() vous écoutez constamment vers un document comme expliqué dans le doc :

Vous pouvez écouter un document avec la méthode onSnapshot(). Un appel initial utilisant le rappel que vous fournissez crée immédiatement un instantané du document avec le contenu actuel du document unique. Ensuite, chaque fois que le contenu change , un autre appel met à jour l'instantané du document.

Comme expliqué dans ces documents, ces deux méthodes s'appliquent à un document ou à une collection de documents (y compris un requête ).

12
Renaud Tarnec