【问题标题】:Cloud Functions for Firebase monitor node leaf if deleted check if parent existsCloud Functions for Firebase 监控节点叶是否已删除检查父节点是否存在
【发布时间】:2017-04-02 04:25:01
【问题描述】:

我正在监控节点叶作业/{jobid}/proposals 的变化。每当我删除提案时,该函数就会执行并重新插入提案(这是预期的行为)。 问题是当我删除其父 {job} 时,提案会重新插入具有相同父 ID 的新对象中。有没有办法检查父母是否存在?如果是,请重新插入提案,否则不要。

exports.RecountProposals = functions.database.ref("/jobs/{jobid}/proposals").onWrite(event => {
    const jobid = event.params.jobid;
    if (!event.data.exists() && event.data.ref.parent.exists()) {
        const propRef = admin.database().ref(`proposals/${jobid}`);
        const counterRef = event.data.ref;
        const collectionRef = counterRef.parent.child('proposals');
        // Return the promise from counterRef.set() so our function
        // waits for this async event to complete before it exits.
        return propRef.once('value')
            .then(messagesData => collectionRef.set(messagesData.numChildren()));
    }
});

我正在检查父级是否存在,但显示错误:

event.data.ref.parent.exists()

TypeError: event.data.ref.parent.exists 不是函数

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    event.data.ref.parent 是一个Reference 类型的对象。正如您从链接的文档中看到的那样,Reference 上没有 exists() 方法。在实时数据库中,如果您想知道某个节点是否有任何数据,只需在该节点上获取快照并在其上调用 val() 以检查它是否为空。引用对象只是路径,它们不包含任何数据知识。

    换句话说,不存在“存在”但不包含数据的节点这样的概念,就像文件系统中的空文件夹一样。对于您可以构建的任何给定路径,那里的数据快照可用(非空)或不可用(空)。

    【讨论】:

    • 谢谢,如果某个函数正在监视/观察节点叶子并且父节点被删除。观察节点的函数是否应该触发?
    • 是的,如果匹配路径下的任何东西发生变化,就会触发一个函数。新节点、更改的值和删除的节点都会触发。与其说是关于父母,不如说是你给出的路径的视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2017-04-30
    • 2019-08-21
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多