首页 > 解决方案 > 无法读取 Firebase Cloud Function 中未定义的属性“ref”

问题描述

Cloud Function 数据生成后,尝试在 Firebase Cloud Function 中运行该函数。实际上,我想通过添加集合的数据来sendEmail触发运行。但是这些事件发生了好几次而不是一次。events

所以我试图添加publish字段,结果是true在事件发生之后。但是会出现以下错误。

TypeError:无法读取未定义的属性'ref'

exports.sendEmail = functions.firestore
  .document("events/{eventId}")
  .onCreate((snap, context) => {
    if (!published) {
      const { published } = snap.data();
      // send an email
    }
    return snap.after.ref.set(
      {
        published: true,
      },
      { merge: true }
    );
  }

标签: javascriptgoogle-cloud-firestoregoogle-cloud-functions

解决方案


onCreate 触发器接收DocumentSnapshot对象作为第一个参数,其中包含刚刚创建的文档的内容。它没有一个名为after. 所以你不能说snap.after.ref,因为snap.after是未定义的。这就是您收到错误消息的原因。

您可能会将 onCreate 与 onUpdate 和 onWrite 混淆,它们都接收一个具有beforeafter属性的 Change 对象。

我并不完全清楚你究竟想在这里完成什么,但一个 onCreate 触发器不应该重复执行,除非它产生错误并启用重试。


推荐阅读