You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore触发器函数同步文档报错:数据参数无效问题排查

问题:Firestore触发器同步文档时的类型错误

我希望通过Firebase触发器函数将Firestore文档同步至另一个集合,编写了如下代码:

exports.foo = functions
  .region("foo")
  .firestore.document("foo")
  .onWrite((events, context) => {
    return new Promise((resolve, reject) => {
      if (events.after.exists) {
        // on create or update
        admin
          .firestore().doc("newFoo")
          .set(events.after.data)
          .then(() => { resolve(true); })
          .catch((ex) => { reject(ex); });
      } else{
        // on delete
        admin
          .firestore()
          .doc("newFoo")
          .delete()
          .then(() => { resolve(true); })
          .catch((ex) => { reject(ex); });
      }
    });
  });

但手动编辑Firestore文档时出现如下错误:

Error: Value for argument "data" is not a valid Firestore document.
Input is not a plain JavaScript object.

疑问:events.after.data返回的是FirebaseFirestore.DocumentData,这应该是doc.set()的正确数据类型,为何会出现该错误?


解决方法

你犯了一个基础错误:events.after.data是方法而非属性,必须调用它才能获取文档数据,也就是要写成events.after.data()。

直接传递events.after.data时,你实际上把函数本身传给了set()方法,而不是函数返回的DocumentData对象,这就导致Firestore判定传入的不是合法的纯JS对象,从而抛出错误。

修正后的代码如下:

exports.foo = functions
  .region("foo")
  .firestore.document("foo")
  .onWrite((events, context) => {
    return new Promise((resolve, reject) => {
      if (events.after.exists) {
        // on create or update
        admin
          .firestore().doc("newFoo")
          .set(events.after.data()) // 此处添加()调用方法
          .then(() => { resolve(true); })
          .catch((ex) => { reject(ex); });
      } else{
        // on delete
        admin
          .firestore()
          .doc("newFoo")
          .delete()
          .then(() => { resolve(true); })
          .catch((ex) => { reject(ex); });
      }
    });
  });

补充说明:data()方法返回的DocumentData本质就是符合要求的纯JavaScript对象,完全适配set()方法的参数要求,修正后即可正常同步文档。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:05:06