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



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

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

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('')后我的连接将关闭,下一行不会运行。你知道我该怎么解决这个问题吗?

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

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

最新更新