web-dev-qa-db-ja.com

Cloud Firestoreのget()とsnapshot()の違い

FirebaseのCloud Firestoreから一部のデータを読み取っていますが、その方法をいくつか見てきました。私が見た例では、次のようにgetおよびonSnapshot関数を使用しています。

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

またはこれ

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);
        });

それらの間に違いはありますか?

11
rubotero

doc で説明されているように:

Cloud Firestoreに保存されているデータを取得するには、2つの方法があります。これらの方法はいずれも、ドキュメント、ドキュメントのコレクション、またはクエリの結果で使用できます。

  • メソッドを呼び出してデータを取得します。
  • データ変更イベントを受け取るようにリスナーを設定します。

リスナーを設定すると、Cloud Firestoreはリスナーにデータの初期スナップショットを送信し、ドキュメントが変更されるたびに別のスナップショットを送信します。

get()を使用すると、「単一のドキュメントのコンテンツを取得する」一度だけします。これは一種の "get and forget"です。ドキュメントが(バックエンド)Firestoreデータベースで変更された場合、変更を確認するにはget()を再度呼び出す必要があります。

反対に、onSnapshot()メソッドを使用する場合、 doc で説明されているように、常にドキュメントをリッスンします。

onSnapshot()メソッドを使用してドキュメントを聞くことができます。指定したコールバックを使用して最初の呼び出しを行うと、単一のドキュメントの現在のコンテンツを含むドキュメントのスナップショットがすぐに作成されます。次に、内容が変更されるたびに、別の呼び出しがドキュメントのスナップショットを更新します。

これらのドキュメントで説明されているように、これらの2つのメソッドは1つのドキュメントまたはドキュメントのコレクション( query を含む)に適用されます。

12
Renaud Tarnec