【问题标题】:Get return from onFinalize Firebase cloud function从 onFinalize Firebase 云函数获取返回
【发布时间】:2021-10-01 14:01:10
【问题描述】:

我创建了一个 unzip onFinalize 函数,它解压缩任何复制到存储的文件,然后删除该文件,它运行良好,但我想从 onFinalize 云函数返回到我的 Angular 应用程序,或者以某种方式监听知道何时完成该过程。

现在我使用日志,但它很烦人,因为对 logger api 的其余调用使用 accessToken,并且在 3600s 过期后无法刷新 accessToken (仅当用户注销并再次登录时再次计数)

在 Angular 中是否有一个很好的解决方案,无需休息调用,或无需访问令牌?

export const manageZipArchives = functions
  .region("xxxxx")
  .runWith({timeoutSeconds: 540, memory: "512MB"})
  .storage.bucket("xxxxxxxxx")
  .object()
  .onFinalize(async (obj: functions.storage.ObjectMetadata) => {
    const file = admin
      .storage()
      .bucket(obj.bucket)
      .file(obj.name!);

    ...

    return ok;
  });

【问题讨论】:

  • 您无法将后台函数的响应发送回客户端。有一种使用实时数据库的解决方法,但我不确定您是否使用 Firebase SDK,正如您提到的 REST API。
  • 是的,但很奇怪,我听不到,也听不到函数的返回。我也在考虑实时数据库,现在我在考虑替代解决方案,但感谢您的回复。

标签: angular typescript firebase google-cloud-functions


【解决方案1】:

很奇怪,我听不到,或者从函数中返回 (来自你的 cmets)

由 Cloud Storage 事件触发的 Cloud Functions 是 背景 Cloud Functions。他们没有任何客户端(或前端)的概念:在 Cloud Storage 中创建的文件可能是由后端进程创建的,例如在 Compute Engine 实例上运行的应用程序。

在您的情况下,您可以利用FirestoreRealtime Database 提供的实时监听器。

让我们以 Firestore 文档为例。流程如下:

在您的 Angular 应用中:

  1. 在特定集合中使用doc() 方法生成文档引用。
  2. 使用id 属性获取与此参考对应的文档ID。
  3. 将此文档 ID 分配为您上传的文件的 Custom Metadata
  4. 使用onSnapshot() 方法设置此文档参考的侦听器。该文档尚不存在,但这不是问题:当它被创建时,监听器将被触发。
  5. 上传文件

在您的云函数中:

  1. 当解压、删除等所有异步工作完成后,获取存储为自定义元数据值的文档 ID 的值并在 Firestore 中创建文档 => 将触发 Angular 应用中的监听器并且您知道此文件的工作已完成。

请注意,如果您想向前端报告潜在的错误或异常,您还可以使用 Firestore 文档:例如,您可以添加一个 status 字段和一个带有所需信息的 errorMessage 字段。在侦听器中,您将获得这些字段的值。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2020-03-08
    • 1970-01-01
    • 2018-02-08
    • 2019-05-10
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多