为什么我会收到此Cloud Firestore功能错误?

时间:2017-11-17 15:23:48

标签: javascript node.js firebase google-cloud-firestore

我在Cloud Firestore Function日志视图中收到此错误 我是JavaScript和Firestore的新手,可以在这个

上使用一些建议
  

TypeError:event.data.previous.data不是函数   exports.onVisitorPres ...

exports.onVisitorPresenceWrite = functions.database
    .ref("/VISITORS_PRESENCE/{uid1}/{uid2}").onWrite((event) => {
        // Get the data written or deleted on the Realtime Database
        var eventStatus = event.data.val();
        const previousData = event.data.previous.data();
        // If the onWrite event is a delete event then use previousData
        if(eventStatus == null){
            eventStatus = previousData;
        }
    });

我想要做的是在删除关键项目和添加新项目时,使用Firebase实时数据库密钥和Firestore功能触发器上的.onWrite((event)。 我以为我可以检查eventStatus == null,那就是删除数据的时候我只是使用previousData(在删除它之前)?

1 个答案:

答案 0 :(得分:4)

event变量是Event的一个实例,因此调用event.data将为Firestore返回DeltaDocumentSnapshot,为实时数据库返回DeltaSnapshot。< / p>

使用这些增量快照,您可以使用previous获取之前的值,这将返回另一个DeltaDocumentSnapshotDeltaSnapshot,其中包含触发写入事件之前的先前状态。

在您的示例中,您使用的是Firebase实时数据库触发器,这意味着event.data.previous将返回DeltaSnapshot,但不支持data(),而是支持val() 1}}。

在这种情况下,正如您使用var eventStatus = event.data.val();所做的那样,您需要在val()上致电previous

const previousData = event.data.previous.val();

如果您尝试使用Firestore触发器,则需要更改此设置:

functions.database.ref("[...]")

对此:

functions.firestore.document("[...]")

然后你可以使用event.data.previous.data()