在Cloud Functions for Firebase中删除节点时未调用onDelete

时间:2017-08-09 21:57:26

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

我正在尝试围绕以下和关注者为firebase应用构建触发器。下面是我的云代码片段。我希望在用户关注时增加一个计数器。为此,我使用oncreate(当用户获得他们的第一个跟随者时,由于此时结构不存在),然后我使用onupdate。然后,当用户取消关注并被删除时,我使用ondelete减少以下计数。

我遇到的问题是.ondelete没有被调用,只有.onupdate被调用,无论用户被添加或删除(回想起来我觉得有意义)。我的问题是如何编写云函数来将删除与添加分开。

数据库看起来像这样

user1
  - following
     -user2
       -small amount of user2data
     -user3
       -small amount of user3data

代码:

    exports.countFollowersUpdate = functions.database.ref('/{pushId}/followers/')
        .onUpdate(event => {

          console.log("countFollowers")


          event.data.ref.parent.child('followers_count').transaction(function (current_value) {

            return (current_value || 0) + 1;
          });


        });

exports.countFollowersCreate = functions.database.ref('/{pushId}/followers/')
    .onCreate(event => {

      console.log("countFollowers")


      event.data.ref.parent.child('followers_count').transaction(function (current_value) {

        return (current_value || 0) + 1;
      });


    });


exports.countFollowersDelete = functions.database.ref('/{pushId}/followers/')
    .onDelete(event => {

      console.log("countFollowers2")


      event.data.ref.parent.child('followers_count').transaction(function (current_value) {

        if ((current_value - 1) > 0) {
          return (current_value - 1);
        }
        else{
          return 0;
        }
      });

1 个答案:

答案 0 :(得分:1)

onDelete未被调用,因为您正在侦听整个followers节点,因此只有当关注者计数变为零(没有任何剩余)时才会调用它。相反,你可能希望所有这些更像:

functions.database.ref('/{pushId}/followers/{followerId}').onDelete()

您拥有顶级推送ID也很不寻常。结构通常更像/users/{pushId}/followers/{followerId}