【问题标题】:Can I perform additional operations after responding from a Firebase Cloud Function? [duplicate]从 Firebase Cloud Function 响应后,我可以执行其他操作吗? [复制]
【发布时间】:2023-04-05 10:38:02
【问题描述】:

我目前正在寻找一个请求(使用 Express/Firebase 云函数)并进行一些计算/提出一些请求,发送一个响应,然后在更新我的数据库或进行一些额外的计算之前响应用户。

用例示例:有时,用户会关注另一个用户。这意味着我想更新整个数据库,以便以后我的数据位于正确的位置。我不需要我的用户等待我这样做,这是在服务器知道用户希望关注他们很久之后我可以做的事情。

我能否接收用户请求、执行服务器操作、响应用户,然后继续使用我的云功能?我已经读过一个函数在响应时终止的地方,但不清楚你是如何处理这个的,或者它是否只在特定响应时终止。

【问题讨论】:

  • 推荐的方法是使用 pubsub 触发器,这样您就不必编写不必要的文档了。

标签: firebase express google-cloud-firestore google-cloud-functions


【解决方案1】:

解释的方式是不可能实现的,我的意思是,你从一个函数返回之后,过程就完成了。

不过,有几种模式可以实现,只是玩triggers的问题,看看吧。

您可以在 firestore 集合中保存状态并触发后台函数,该函数获取此状态并执行您需要的任何操作。

如果您不想将其保存在收藏夹中,您也可以使用PubSub

这应该为您提供了一个很好的起点来调查什么是您的用例的最佳解决方案。

希望这会有所帮助!

【讨论】:

  • 这非常有用,因为它引导我记录触发器!我认为这是更聪明的方法,所以我改变一件事,触发器可以改变成百上千。谢谢
  • 很高兴它帮助了你,我建议直接进入 pubsub 区域,这就是我通常如何解决这种情况
  • @DanFein:如果它有助于解决您的问题,您应该将此答案标记为解决方案。
【解决方案2】:

Firebase 有两种云函数:一种是您可以直接调用HTTPS Callable functionsHTTPS "simple" functionsscheduled functions),另一种是响应事件 由某些 Firebase 服务或 Google Cloud 功能生成,例如 FirestoreAuthentication eventsCloud Storage(有关完整列表,请参阅 https://firebase.google.com/docs/functions

传统上,当您想在用户启动云函数后向他/她发送响应时,您会选择 HTTPS 可调用函数或 HTTPS“简单”函数。但这不是唯一的方法:您可以很好地使用后台触发的 Cloud Function 向用户发送反馈,主要是通过在 Firestore(或实时数据库)中将某些内容写入前端正在侦听的位置.

通过第二种方式,您可以很好地“响应用户,然后继续继续使用 [the] 云功能”。当您将响应发送回用户时,使用可调用的云函数时,函数会终止。

所以让我们更详细地描述一下 Firestore 的这个方法:

  1. 您触发后台功能,例如通过从前端写入 Firestore 文档/集合
  2. 同时,您从前端设置了一个特定文档的侦听器(不一定是与上述相同的文档)。设置监听器见here
  3. Cloud Function 开始执行一些工作,并在某一时刻写入 Firestore 中的此特定文档
  4. 在前端,通过监听器通知用户写入
  5. Cloud Function 可以在后台继续执行其他任务。

关键是你必须通过链接promise来正确链接Cloud Function的所有异步任务。

【讨论】:

  • 因此,实现这一点的技术本质上是在不期望来自同一个地方的响应的情况下进行更改,但是因为您设置了一个侦听器,所以您为响应做准备。因此,您实际上是在某处发送“关注”,然后如果您看到文档已更新,您是否将其视为您的回复?
  • 是的,您预先知道要在其中编写云函数反馈的集合/文档。您为此文档设置了一个侦听器,当您从 Cloud Function 写入此文档时,用户会在其前端获取更新。
  • 例如,您在文档中有一个 status 字段,并相应地使用例如更新它。 startedsuccesserror 等值
  • 实际上,继续工作的推荐方法是使用 pubsub 触发器。这样可以避免不必要地编写文档。
  • 感谢@DougStevenson 的澄清!
猜你喜欢
  • 2021-11-26
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 2018-05-19
  • 2021-05-02
  • 2020-06-24
  • 2017-04-12
  • 2020-06-05
相关资源
最近更新 更多