javascript - Firebase 函数 onCreate() onDelete() 路径特异性

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

我对 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/

相关文章:

Android Firebase 奇怪的数据映射

asp.net - 在ASP.NET中嗅探XMLHttpRequest(浏览器嗅探AJAX请求)的可靠方法?

javascript - 如何使用 Firebase 按时间戳排序?

android - 事件未显示在 firebase 上

android - Firebase @Exclude 注释同时适用于 Firestore 和实时数据库?

java - Firebase:无法将 java.lang.Boolean 类型的值转换为字符串

javascript - 如何将 json 对象发送到 Controller JsonResult 方法

javascript - 如何使用 Javascript 阻止文本出现然后在一秒钟后消失?

javascript - 如何在 Vue Konva 中使用 Sprite 对象/动画?

javascript - 获取 Firebase 当前用户信息