Fire父数据库触发器的云功能不会在父删除时触发

时间:2017-05-03 17:56:43

标签: firebase firebase-realtime-database google-cloud-functions

为什么在移除父级时不会触发?需要一个firebaser来解释它为什么以这种方式实现。这是一个例子:

ref:ref('/users/{user_id}')

上的触发功能

触发器触发:firebase database:set {'/users/123': someval}(伪代码)

触发器触发:`firebase database:remove'/ users / 123'

触发不会触发:firebase database:remove '/users'

我希望最后一个父删除语句触发触发器,因为它正在删除子数据。如果该节点中有两个用户,我希望它会触发两次。我知道我可以在/users上添加另一个触发器并循环遍历孩子。但是你们为什么用这种方式实现触发器呢?只是好奇。仍然认为功能很棒BTW。感谢。

2 个答案:

答案 0 :(得分:0)

有几个可用的事件表现出相同的行为......在Swift中我们有

.childAdded
.childChanged
.childRemoved

.value

如果您注意到事件的名称以.child开头,并且您是正确的,则只会触发添加,更改或删除的子节点。实时数据库的行为类似于云触发器。

然而,.value(在父节点_上是你正在寻找的那个,因为它将在创建或删除父节点时触发。当然,当删除时,快照(或事件数据)将为零,但它实际上确实很火。

作为测试,这里有一些Swift代码可以监视名为... parent_node的父节点。

 let nodeRef = self.rootRef.child("parent_node")

 nodeRef.observe(.value, with: { snapshot in
       print(snapshot)
 })

当parent_node不存在并添加时,事件就像触发器一样触发。在这个例子中,我添加了一个子节点名称= larry。这是触发和打印快照事件内容的事件

Snap (parent_node) {
    name = larry;
}

然后我删除了parent_node,它也像触发器一样触发,因为它是我们感兴趣的父节点,这就是结果

Snap (parent_node) <null>

所以底线是儿童观察者只为儿童事件开火,但是父母价值观察者会为所有事情开火。

答案 1 :(得分:0)

Yea看起来像是Cloud Functions for Firebase onWrite trigger not called when parent is deleted

的副本

我在搜索时讨厌它,当别人回答同一个问题时仍然无法找到它。

如果有任何firebaser读取此内容,那么查看“适用于Firebase的Cloud Functions”的标记仍然会有帮助