提问者:小点点

如何在Firebase cloudFunctions的express服务器中执行res.send()后的代码


我正在使用云函数构建一个express服务器,但是我遇到了一个res.send()的问题。在一个普通的express服务器上,我可以在res.send()之后执行一些代码,但是在我的express服务器上,使用Firebase cloudFunctions,res.send()关闭了我的连接,之后我就不能执行任何代码。

下面是我需要做的:在我的服务器中,我有一个从Slack api对话框接收一些数据的endpoint,然后Slack api正在等待空响应res.send(),因此我需要发送它。但我还需要将这些数据保存在我的DB中,并在slack中向我的用户发送一条消息“您的帖子已保存!”所以我的endpoint的作用是:

async function myEndpoint(req, res) {
    await savePayload(req.payload);
    await sendUserMessage(req.payload);
    res.send('');
}

但有时res.send()需要很长时间才能开始运行,并且在slack上会出现错误,因此我希望执行如下操作:

async function myEndpoint(req, res) {
    res.send('');
    await savePayload(req.payload);
    await sendUserMessage(req.payload);
}

但是正如我所说的,在res.send('')之后,我的连接将关闭,接下来的行将不运行。你知道我该怎么解决这个问题吗?


共1个答案

匿名用户

一旦响应完成,HTTP函数就会立即终止执行--这是云函数的基本架构,因此无法绕过它。您将需要:

  1. 优化代码路径,以便始终在截止日期前发送空响应,或者
  2. 触发一个后台函数执行,该函数将异步执行工作,然后进行响应。这可以通过例如写入Cloud Firestore或发送pub/sub消息来完成