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" 但不包含任何数据的节点,例如文件系统中的空文件夹。对于您可以构建的任何给定路径,那里的数据快照可用(非空)或不可用(空)。
我正在监视节点叶作业/{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" 但不包含任何数据的节点,例如文件系统中的空文件夹。对于您可以构建的任何给定路径,那里的数据快照可用(非空)或不可用(空)。