Cloud Firestore中的get()和snapshot()之间的区别

rub*_*ero 7 javascript firebase google-cloud-firestore

我正在从Firebase的Cloud Firestore中读取一些数据,但是我已经看到了几种方法。我看到的示例使用了get和onSnapshot函数,如下所示:

db.collection("cities").doc("SF")
 .onSnapshot(doc => {
      console.log(doc.data());
 });
Run Code Online (Sandbox Code Playgroud)

或这个

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);
        });
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别吗?

Ren*_*nec 7

文档中所述:

两种方法来检索存储在Cloud Firestore中的数据。这些方法可以与文档,文档集合或查询结果一起使用:

  • 调用方法以获取数据。
  • 设置一个侦听器以接收数据更改事件。

设置侦听器时,Cloud Firestore会向侦听器发送数据的初始快照,然后在每次文档更改时发送另一个快照。

使用时,get()只能 “检索单个文档的内容” 一次。这是一种“忘记”的方法:如果文档在(后端)Firestore数据库中发生更改,则需要get()再次调用以查看更改。

相反,如果您使用该onSnapshot()方法,则您将按照doc中的说明不断收听文档

您可以使用该onSnapshot()方法收听文档。使用您提供的回调进行的初始调用会立即使用单个文档的当前内容创建一个文档快照。然后, 每次内容更改时,另一个调用都会更新文档快照。

如这些文档中所述,这两种方法适用于一个文档或文档集合(包括query)。

  • onSnapshot 比 get 贵吗? (8认同)
  • @KickButtowski 您仍然只按读取操作付费,就好像您正在执行 get 方法一样。所以事实上,这取决于你做了多少个 CRUD ... firebase 本身建议使用 onSnapshot 作为默认值 (3认同)