我对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,则它会匹配以下两个位置的事件:
/富/酒吧
/富/酒吧/巴兹/真/深/路径
在我的情况下,/invites
在该示例中等同于/bar
。
但是,上述功能仅触发添加到/invites
的第一个孩子以及被删除的最后一个孩子。在这两个条件之外,其他任何东西都不会触发计数器功能。我能够完成这项工作的唯一方法是使用它作为我的路径:
invites/{idOfInvite}
虽然我知道这会起作用,但我不知道这正是我需要的。后来我可能决定在某个{idOfInvite}
的路径下添加新数据,这会导致我的计数器功能被激活(我想?)。
这个SO answer表示我的函数的行为是预期的,但根据我对文档的理解,它不是我所期望的。也许我正在错误地解释文档?
正如您所知,我对这些添加/删除事件触发方式的理解有些不同。
答案 0 :(得分:5)
onUpdate
。如果路径已经存在(即,它已经有一个子节点),那么添加另一个子节点不是该路径上的“创建”事件。这是一个更新事件。因此,如果您的函数使用/invites/{id}
,则只要该路径下的任何内容被写入,它就会被触发。
您在/invites
使用onCreate / onDelete对于您的用例是正确的,因为当新创建或删除---
title: My Post
author: JeanJouX
date: 2016-09-06
tags: Haskell
description: The teaser of my post to be shown in the RSS feed. Not in the full page.
---
The rest of the post to be shown in the full page of my website
的任何单个子项时,它实际上要求被调用。