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

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

我在 Cloud Firestore Function 中收到此错误日志 View 。
我是 JavaScript 和 Firestore 新手,需要一些建议

TypeError: event.data.previous.data is not a function at 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 (在它被删除之前??)

最佳答案

event 变量是 Event 的实例因此调用 event.data 将返回 DeltaDocumentSnapshot对于 Firestore 和 DeltaSnapshot用于实时数据库。

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

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

在这种情况下,正如您对 var eventStatus = event.data.val(); 所做的那样,您需要对上一个调用val():

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

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

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

对此:

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

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

关于javascript - 为什么我会收到此 Cloud Firestore 功能错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47353981/

相关文章:

javascript - i18nextify 不翻译为 javascript 函数

firebase - 如何创建 Firebase 身份验证声明?

javascript - Firebase 权限被拒绝

javascript - 如何从不带引号的变量中推送 Firebase 中的数字?

javascript - 获取 mongodb 查询中项目的索引

javascript - CSS 挫折 : How to center floating images of different widths inside LI tags?

javascript - 如何评估以下 Javascript 表达式?

node.js - 未处理的PromiseRejection警告: NoSuchSessionError: invalid session id selenium webdriver

node.js - Socket.io从1.0开始支持二进制流,有没有专门针对image的完整例子

node.js - 使用 node.js 从标准输出实时读取