Cloud Firestore 中 get() 和 onSnapshot() 的区别
Posted
技术标签:
【中文标题】Cloud Firestore 中 get() 和 onSnapshot() 的区别【英文标题】:Difference between get() and onSnapshot() in Cloud Firestore 【发布时间】:2019-06-26 01:17:37 【问题描述】:我正在从 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);
);
它们之间有什么区别吗?
【问题讨论】:
【参考方案1】:如doc中所述:
有两种方法可以检索存储在 Cloud Firestore 中的数据。任何一个 这些方法中的一些可以用于文档、文档集合、 或查询结果:
调用方法获取数据。 设置侦听器以接收数据更改事件。当您设置监听器时,Cloud Firestore 会向您的监听器发送一个 数据的初始快照,然后每次创建另一个快照 文档更改。
当您使用get()
时,您“仅检索单个文档的内容”一次。这是一种“一劳永逸”:如果(后端)Firestore 数据库中的文档发生更改,您将需要再次调用 get()
以查看更改。
相反,如果您使用onSnapshot()
方法,您不断地收听文档,如doc 中所述:
您可以使用
onSnapshot()
方法收听文档。一个初始 使用您提供的回调调用创建文档快照 立即使用单个文档的当前内容。然后, 每次内容更改,另一个调用会更新文档 快照。
如这些文档中所述,这两种方法适用于一个文档或一组文档(包括 query)。
【讨论】:
onSnapshot 比 get 贵吗? @KickButtowski 是的。 @FarisMX 见***.com/a/51431655/3371862以上是关于Cloud Firestore 中 get() 和 onSnapshot() 的区别的主要内容,如果未能解决你的问题,请参考以下文章
使用规则禁用 Firebase Cloud Firestore 中的查询集合
我们会为仅从缓存中读取(Cloud FireStore)支付(成本)吗? [复制]