Firebase onFinalize 不会触发函数模拟器

Firebase onFinalize doesn't trigger for functions emulator

我正在为本地开发设置 env,只是测试模拟器是否正常工作,但我的简单测试失败了,没有任何错误。

// functions/index.js
exports.pdftoimg = functions.storage.object().onFinalize(async (object) => {
  console.log({ object });
});

模拟器启动没有问题:

firebase emulators:start
i  emulators: Starting emulators: auth, functions, firestore, hosting, pubsub, storage
✔  functions: Using node@16 from host.
i  hosting: Serving hosting files from: dist
✔  hosting: Local server: http://localhost:5002
i  functions: Watching "/Users/xxx/Code/myApp/functions" for Cloud Functions...
✔  functions[us-central1-pdftoimg]: storage function initialized.

┌─────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! It is now safe to connect your app. │
│ i  View Emulator UI at http://localhost:4000                │
└─────────────────────────────────────────────────────────────┘

但是当我使用 UI (http://localhost:4000/storage/default-bucket) 将测试 pdf 文件上传到存储模拟器时,日志中没有显示任何内容。

我测试了 Firestore Db 的云触发器,但这似乎有效。

我错过了什么?

谢谢

我看你是Triggering a Cloud Function on Cloud Storage Changes that returns the uploaded object metadata.

但是,此功能不上传文件:

onFinalize Sent when a new object (or a new generation of an existing object) is successfully created in the bucket. This includes copying or rewriting an existing object. A failed upload does not trigger this event.

在这种情况下,请按照提供给 Upload Files 的文档进行操作。 最后,将 Error Handling 添加到您的代码中将在下次帮助您,因为在这种情况下您没有日志或任何东西来调试错误。

更新:

这个问题 onFinalize trigger not working in emulator,使用相同的 Cloud Functions 得到相同的结果。我们必须等待对此的支持。

经过一些研究,一位同事发现这个 github 问题使用了与您正在使用的相同的文档和相同的方法。 第一个描述了如何 ‘onFinalize’ is triggered even on failed upload: 并且还重定向到上面提到的文档。在这种情况下,该函数在不应该触发的时候触发了,你可以尝试这样执行它。