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

How to exec code after res.send() in express server at Firebase cloudFunctions

我正在使用云功能构建一个快速服务器,但我遇到了 res.send() 的问题。 在一个普通的快速服务器中,我可以在 res.send() 之后执行一些代码,但是在我的快速服务器上使用 Firebase cloudFunctions res.send() 关闭我的连接,之后我无法执行任何东西。

这是我需要做的: 在我的服务器中,我有一个端点可以从 Slack api 对话框接收一些数据,之后 Slack Api 正在等待空响应 res.send(),所以我需要发送它。 但我还需要将该数据保存在我的数据库中,并在 slack 中向我的用户发送一条消息 "Your post was saved!" 那么我的端点是做什么的:

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

但有时 res.send() 需要很长时间才能启动 运行ning 并且我在 slack 上遇到错误,所以我想做类似的事情:

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

但正如我所说,在 res.send('') 之后,我的连接已关闭并且下一行没有 运行。你知道我该如何解决这个问题吗?

HTTP 函数在响应完成后立即终止执行——这是 Cloud Functions 的基本架构,因此没有办法绕过它。您将需要:

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