【问题标题】:What is the difference between data() and get()data() 和 get() 有什么区别
【发布时间】:2017-11-29 13:46:47
【问题描述】:

我很难理解在 DocumentDeltaSnapshot 上调用 get()(不带参数)或 data() 之间的区别。这里是a link to the reference docs

我认为文档对get 尤其模糊:

为此方法提供的参数必须是要检索的数据的键。

但是你可以不带键调用它。

值不能为空。

在我阅读时,这里的 value 是指返回值。那么如果密钥不正确会发生什么?

get 只是 data 的更灵活的替代品,还是我忽略了一些基本的东西?

----- 编辑----

我的困惑似乎来自get 有两种类型。一种用于检索文档快照,另一种用于访问文档数据中的特定字段。

const ref = db.collection("someCollection").doc("someDocumentId");
const value = await ref
  .get()
  .then(doc => doc.get("someProperty"));
  // or for the whole document do
  .then(doc => doc.data());

更令人困惑的是,Typescript 的 SDK 类型定义也很乐意让我这样做:

const value = await ref
  .get()
  .then(doc => doc.data().get("someProperty"));

这将导致运行时错误,因为 data() 的返回值上不存在 .get。

但要澄清:第一个get 调用不能有任何参数。第二个 get 调用始终需要 1 个参数。所以data 可以用来代替第二个get 来获取完整的文档数据。

【问题讨论】:

    标签: firebase google-cloud-functions google-cloud-firestore


    【解决方案1】:

    documentation for Firestore triggers 表明data() 用于作为 JavaScript 对象访问整个文档,而 get() 用于访问单个字段。

    您可以使用 get 函数访问特定字段:

    // Fetch data using standard accessors
    const age = event.data.data().age;
    const name = event.data.data()['name'];
    
    // Fetch data using built in accessor
    const experience = event.data.get('experience');
    

    按照我阅读 API 文档的方式,您传递给 get() 的字符串不能为空。您必须提供要从文档中访问的某些属性的名称。

    【讨论】:

    • 你是对的。但我已经解释了混乱的来源。
    • 是的,我知道这有多令人困惑。事实证明,Cloud Functions API 和 Firestore 客户端 API 实际上是由不同的团队驱动的,所以它们可能是独立进化的,在这里发生了令人困惑的碰撞。
    • 这正是我尝试阅读文档时得到的印象。我希望他们在不久的将来设法合并一些东西。
    猜你喜欢
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2018-06-18
    相关资源
    最近更新 更多