1

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

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

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('')我的连接关闭并且下一行没有运行之后。你知道我该如何解决这个问题吗?

4

1 回答 1

3

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

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