Cloud Functions for Firebase 监控节点叶(如果删除)检查 parent 是否存在

Cloud Functions for Firebase monitor node leaf if deleted check if parent exists

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

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()));
    }
});

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

event.data.ref.parent.exists()

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

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

换句话说,不存在 "exists" 但不包含任何数据的节点,例如文件系统中的空文件夹。对于您可以构建的任何给定路径,那里的数据快照可用(非空)或不可用(空)。