【问题标题】:Firebase functions onCreate() onDelete() path specificityFirebase 函数 onCreate() onDelete() 路径特异性
【发布时间】:2017-08-27 17:00:07
【问题描述】:

我对 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,它会匹配这两个位置的事件:

/foo/bar

/foo/bar/baz/really/deep/path

在我的情况下,/invites 将等同于该示例中的/bar

但是,上述函数仅在添加到/invites 的第一个子项以及删除的最后一个子项时触发。在这两个条件之外,其他任何事情都不会触发计数器功能。我能够完成这项工作的唯一方法是使用它作为我的路径:

invites/{idOfInvite}

虽然我知道这可行,但我不知道这正是我所需要的。稍后我可能会决定在某个{idOfInvite} 的路径下添加新数据,这会导致我的计数器函数触发(我想?)。

这个SO answer 表示我的函数的行为是预期的,但根据我对文档的理解,这不是我所期望的。也许我对文档的解释不正确?

如您所知,我对这些添加/删除事件触发方式的理解有些偏离。

【问题讨论】:

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


    【解决方案1】:

    onCreate 仅在数据库中新创建给定路径时才会调用。如果路径已经存在(也就是说,它已经有一个孩子),那么添加另一个孩子不是该路径上的“创建”事件。这是一个更新事件。因此,如果您的函数使用onUpdate,则该路径下的任何内容都会在写入时触发。

    您在 /invites/{id} 使用 onCreate/onDelete 对您的用例来说是正确的,因为它实际上是在新创建或删除 /invites 的任何单个子级时要求调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 2018-07-21
      • 2020-06-12
      • 2018-09-14
      • 2020-01-19
      • 1970-01-01
      • 2022-01-14
      相关资源
      最近更新 更多