我有一个函数,可以计算将要进行活动的所有成员。
我有registered_people键来计算此事件中有多少用户。当有人将自己添加到/ registrations / approved链接时,此密钥将更新+1或-1。
这很好。请参见下面的方法。
exports.reservation = functions.database.ref('/agenda/activitys/{year}/{month}/{day}/{time}/{event}/registrations/approved/{key}').onWrite((event) => {
var collectionRef = event.data.adminRef.parent.parent;
var countRef = collectionRef.parent.child('registered_people');
console.log("Fired of reservation watcher");
return countRef.transaction(function(current) {
if (event.data.exists() && !event.data.previous.exists()) {
return (current || 0) + 1;
}
else if (!event.data.exists() && event.data.previous.exists()) {
return (current || 0) - 1;
}
});
});
但是我的问题是管理员删除事件时。网址/agenda/activitys/{year}/{month}/{day}/{time}/{event}
被删除,上面定义的方法被触发并将数据再次写入url。如何防止管理员删除事件时此方法写入任何内容?
此代码不起作用:
if (event.data.previous.exists()) {
return;
}
因为当用户要从事件中注销时,必须更新registered_people。使用上面定义的代码,删除将不再起作用。因此,我需要检查事件是否已删除。
答案 0 :(得分:1)
首先,您正在运行旧版本的function&admin,请进行更新以确保您的firebase-functions和firebase-admin已更新:
在您的functions文件夹中运行:
npm install firebase-functions@latest --save npm install firebase-admin@latest --save
然后您的代码应如下所示:
exports.reservation = functions.database.ref('/agenda/activitys/{year}/{month}/{day}/{time}/{event}/registrations/approved/{key}').onWrite((change, context) => {
var collectionRef = change.after.ref.parent.parent;
var countRef = collectionRef.parent.child('registered_people');
let increment;
if (change.after.exists() && !change.before.exists()) {
increment = 1;
} else if (!change.after.exists() && change.before.exists()) {
return null;
} else {
return null;
}
return countRef.transaction((current) => {
return (current || 0) + increment;
}).then(() => {
return console.log('Counter updated.');
});
});