我对 Firebase 功能事件缺乏了解。为了使我的函数按预期工作,我向引用路径添加了我认为需要的更多特异性。
例如,我想在每次向此路径添加或删除子项时增加或减少计数:
/邀请
我使用这些作为我的函数来完成此任务:
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 是我的路径的基础:
Path specifications match all writes that touch a path, including writes that happen anywhere below it. If you set the path for your function as /foo/bar, it matches events at both of these locations:
/foo/bar
/foo/bar/baz/really/deep/path
就我而言,/invites
相当于该示例中的 /bar
。
但是,上述函数仅在第一个子项被添加到 /invites
以及最后一个子项被删除时触发。除了这两个条件之外,任何其他条件都不会触发计数器功能。我能够完成这项工作的唯一方法就是使用它作为我的路径:
邀请/{idOfInvite}
虽然我知道这可行,但我不知道这正是我所需要的。稍后我可能决定在某个 {idOfInvite}
的路径下添加新数据,这将导致我的计数器函数触发(我认为?)。
这个 SO answer 表明我的函数的行为是预期的,但根据我对文档的理解,这不是我所期望的。也许我错误地解释了文档?
正如您所知,我对这些添加/删除事件如何触发的理解有些偏差。
最佳答案
onCreate
仅当给定路径在数据库中新创建时才会被调用。如果该路径已经存在(即,它已经有一个子路径),则添加另一个子路径不是该路径上的“创建”事件。这是一个更新事件。因此,如果您的函数使用 onUpdate
,则只要写入该路径下的任何内容,它就会被触发。
您在 /invites/{id}
中使用 onCreate/onDelete 对于您的用例来说是正确的,因为它实际上要求在 /invites
的任何单个子级时调用> 是新创建或删除的。
关于javascript - Firebase 函数 onCreate() onDelete() 路径特异性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45907294/