Angular Firestore 查询中的 get() 和 valueChanges() 有啥区别? [关闭]

Posted

技术标签:

【中文标题】Angular Firestore 查询中的 get() 和 valueChanges() 有啥区别? [关闭]【英文标题】:What is the difference between get() and valueChanges() in Angular Firestore query? [closed]Angular Firestore 查询中的 get() 和 valueChanges() 有什么区别? [关闭] 【发布时间】:2020-01-28 22:43:09 【问题描述】:

正如标题所说,我想问一下在 Angular Firestore 中执行查询时 get() 和 valueChanges() 之间有什么区别(如果有的话)。

两者之间在读取/成本方面是否也有任何优势/劣势?

【问题讨论】:

【参考方案1】:

valueChangesget() 之间的主要区别在于,使用get(),您只能获得一次数据,而valueChanges(和snapshotChanges)会在任何时候自动触发链接到您正在收听的文档/集合的数据库中的某些更改。

后者是 firebase 实时数据库的优点,因为您不需要轮询或其他任何事情来获取最新数据,firebase 会处理所有这些!

在我看来,get() 很有用,例如,当您更新集合中的文档,然后在更新后立即想对该文档执行某些操作,并且只获取一次,例如:

const docRef= this.afs.collection(colId).doc(docId).set(...)

docRef.get().pipe(
  map(doc => doc.data())
)
.subscribe(data => 
   // do stuff with document
)

当然,您可以使用例如valueChanges 调用文档并附加pipe(take(1)),但get() 在这种情况下非常方便。

【讨论】:

【参考方案2】:

valueChanges() 在库 angularfire2 中使用。根据docs:

返回一个文档数据的 Observable。所有快照元数据都被剥离。此方法仅提供数据。

如果你正在做一个角度项目,那么你可以使用库angularfire2,其中包含方法valueChanges()


get() 也用于检索单个文档的内容。

【讨论】:

以上是关于Angular Firestore 查询中的 get() 和 valueChanges() 有啥区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 Firestore 中使用 Angular 删除集合中的文档

如何组合两个 Redux Firebase Cloud Firestore 查询?

我无法显示Cloud Firestore中的图像

从Angular TypeScript中来自firestore的数据中获取未定义

Angular Firestore 中有 .get() 吗?

SwiftUI - 状态更改后的运行功能