【问题标题】:No order for event triggers in Firebase StorageFirebase 存储中的事件触发器没有顺序
【发布时间】:2018-10-01 02:23:41
【问题描述】:

我正在使用 Firebase 存储触发器来在文件上传和删除时收到通知。

这通常似乎工作正常,但文件替换似乎是一个问题,因为这两个事件都被触发但没有确定的顺序。这样我就可以先收到onFinalize,然后再收到onDelete,当然这最终意味着删除。

ObjectMetaDataEventContext 中,我都找不到任何可以区分正确删除和替换的提示。

我是否遗漏了什么,或者这是 Firebase 存储的(已知)错误?


编辑澄清:区分替换和删除不是我的主要目标,但如果我在创建后收到删除,在我看来好像文件已被删除,而实际上只有旧实例被删除.

【问题讨论】:

  • 你能解释一下为什么文件是永久删除还是删除然后创建很重要,这可能会有所帮助。

标签: firebase google-cloud-platform google-cloud-functions firebase-storage


【解决方案1】:

Cloud Functions 根本不保证您的函数处理事件的顺序。这适用于所有事件提供者,而不仅仅是云存储。 (订购保证意味着 Cloud Functions 无法大规模扩展,这是其最重要的属性之一。)

请阅读此页面以了解在可扩展系统中保证订购的难度:https://cloud.google.com/pubsub/docs/ordering

【讨论】:

    【解决方案2】:

    简短的回答是您必须仅根据删除和创建进行设计。目前firebase API没有替换操作,当您上传同名文件时,实际上是两个操作:删除和创建。如果有任何清理或簿记根据删除是临时的还是永久的而改变,则由接收者来解决。

    例如,您可能需要等待一段时间才能确定对象是否实际被替换而不是永久删除。因此,删除处理程序必须将与 perm 删除相关的任务排队,但是这个任务要么在收到创建时被取消,要么任务将检查文件是否仍然存在(在这种情况下它假定替换)。

    请注意,如果用户可以在短时间内替换、删除然后创建,这可能会变得有点复杂。除非有很好的理由来区分烫发和临时删除,否则可能不值得麻烦。

    【讨论】:

      猜你喜欢
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      相关资源
      最近更新 更多