我具有onUpdate云功能,需要检查是否存在数据库节点。
对于我来说,理想的方法是:
exports.watchTeamMemberUpdates = functions.database
.ref('/teams/{teamName}')
.onUpdate((change) => {
if (!change.before.exists()) {
console.log('exists error');
return null;
}
});
但是它需要快照,我给它一个承诺。
是否可以通过任何方式检查带有承诺的文件是否存在?
除了.once.then以外,还有没有更好的方法来制作快照?
答案 0 :(得分:0)
我假设写“我需要检查文件是否存在”是指检查数据库节点是否存在(即团队成员)保存在团队名称下。)我有权随意修改您的问题标题和内容。
请注意,如果您想通过onUpdate()
触发器来检测团队成员是否不存在,您将不会成功,因为此Cloud Function 仅会被触发如果该节点之前存在,则因为我们监视更新(而不是创建)。
因此,您可能应该使用onWrite()
触发器。以下是两种触发器的代码。我建议您在数据库中尝试几次写入和更新(当然,在部署了这两个功能之后),然后查看打印到Cloud Function日志中的内容。
exports.watchTeamMemberUpdates = functions.database
.ref('/teams/{teamName}')
.onUpdate((change, context) => {
if (!change.before.exists()) {
console.log('watchTeamMemberUpdates: exists error');
return null;
} else {
console.log('watchTeamMemberUpdates: Team member exists');
return null;
}
});
exports.watchTeamMemberWrites = functions.database
.ref('/teams/{teamName}')
.onWrite((change, context) => {
if (!change.before.exists()) {
console.log('watchTeamMemberWrites: exists error');
return null;
} else {
console.log('watchTeamMemberWrites: Team member exists');
return null;
}
});
PS:请注意,要传递给onUpdate(handler)
方法的处理程序是一个带有两个参数的函数,请参见https://firebase.google.com/docs/reference/functions/functions.database.RefBuilder#onUpdate。但是第二个是可选的。与onWrite(handler)
方法相同。