【发布时间】:2017-08-27 17:00:07
【问题描述】:
我对 Firebase 函数事件缺乏了解。为了使我的功能按预期工作,我将在引用路径中添加更多的特异性,然后我认为这是必需的。
例如,我想在每次将孩子添加到此路径或从中删除时增加或减少计数:
/invites
我用这些作为我的函数来完成这个:
functions.database.ref('/invites').onCreate(event => {
return admin.database().ref('/counter').transaction((current) => {
return (current || 0) + 1;
})
});
functions.database.ref('/invites').onDelete(event => {
return admin.database().ref('/counter').transaction((current) => {
if (current >=1) return (current - 1);
else return;
})
});
This 是我的路径:
路径规范匹配所有触及路径的写入,包括发生在其下方任何位置的写入。如果将函数的路径设置为 /foo/bar,它会匹配这两个位置的事件:
/foo/bar
/foo/bar/baz/really/deep/path
在我的情况下,/invites 将等同于该示例中的/bar。
但是,上述函数仅在添加到/invites 的第一个子项以及删除的最后一个子项时触发。在这两个条件之外,其他任何事情都不会触发计数器功能。我能够完成这项工作的唯一方法是使用它作为我的路径:
invites/{idOfInvite}
虽然我知道这可行,但我不知道这正是我所需要的。稍后我可能会决定在某个{idOfInvite} 的路径下添加新数据,这会导致我的计数器函数触发(我想?)。
这个SO answer 表示我的函数的行为是预期的,但根据我对文档的理解,这不是我所期望的。也许我对文档的解释不正确?
如您所知,我对这些添加/删除事件触发方式的理解有些偏离。
【问题讨论】:
标签: javascript firebase firebase-realtime-database google-cloud-functions