node.js - Firebase 函数 : how best to await unblocking promises after response is sent?

标签 node.js firebase google-cloud-functions

我在 Node 10 上的 Firebase 函数中使用 Express。我的问题是:如果我有大量 Promise 需要在函数终止之前完成,但我想之后执行此操作我发送了响应 (res.status(200).send...),我能做到这一点的最佳方法是什么?

到目前为止,我已经提出了两种方法,但似乎都不是很好(而且我还没有尝试“完成”方法来看看它是否有效):

  1. 对于每个路由器,添加一个等待累积 promise 的finally...子句。这样做的主要缺点是,在添加新路由器时很容易忘记执行此操作,或者如果路由器已经需要自己的finally子句,则可能会出现错误

  2. 使用 Node 流“完成”事件,https://nodejs.org/docs/latest-v10.x/api/stream.html#stream_event_finish ...但我不知道 Firebase 函数是否允许捕获此事件,或者如果我的函数运行到结束并随后触发事件,它是否仍然会被捕获。

我这样做是为了让我的函数响应更快。感谢您的帮助。

最佳答案

if I have heavy Promises that I need to complete before the function terminates, but I want to do this after I sent the response (res.status(200).send...), how is the best way I could do this?

使用 Cloud Functions,无法在 promise 解决之前发送响应,也无法正常完成这些 promise 的工作。当您发送响应时,Cloud Functions 假定这是该函数要做的最后一件事。当使用 res.send() 发送响应时,Cloud Functions 将终止该函数并关闭代码。任何不完整的异步工作可能永远不会完成。

如果您想在发送响应后继续工作,则必须首先将该工作卸载到不在功能关键路径中的其他组件或服务。一种选择是将消息发送到 pubsub function ,并让该函数在“后台”完成,而第一个函数发送响应并终止。您还可以向其他服务(例如 App Engine 或 Compute Engine)发送消息,甚至可以在其他云中启动工作以异步完成。

另请参阅:

关于node.js - Firebase 函数 : how best to await unblocking promises after response is sent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63581753/

相关文章:

multithreading - 多线程 Firebase 函数

node.js - Firebase Cloud Functions 直接删除 Node ,而不是 24 小时后

android - TypeError : admin. messaging.sendToTopic 不是函数

android - Firebase Auth getIdToken 更新后卡住

javascript - Firebase 保存数据

javascript - 使用 Socket.io 错误的 HTTP 通知

node.js - 我应该使用什么编码来在 nodeJS 中正确生成带有加密的 ETag?

javascript - 如何避免在 Firebase Cloud Functions 中嵌套 promise ?

node.js - 永远无法在 ubuntu 服务器中工作的 nodeJs

javascript - CoffeeScript - 将 SublimeText 配置为简单的 IDE