如何在结束Firebase云函数执行之前发送响应?

如何在结束Firebase云函数执行之前发送响应?,firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,我有一个HTTP Firebase云函数,有时可能需要很长时间才能完成。对于这个特定的用例,我不希望我的用户等到函数完成后才收到200响应 所以我做res.status(200.send()与往常一样,但我没有在执行结束时执行,而是尝试在函数开始时执行。问题是这会停止执行 作为一种解决方法,我正在考虑将重负载转移到另一个函数,并从实时数据库中的写入操作触发它,但是在单个函数中使用这种逻辑要容易得多 是否有办法绕过此限制?在发送响应后,无法继续执行。您通过写入实时数据库触发第二个后台函数的本能是一

我有一个HTTP Firebase云函数,有时可能需要很长时间才能完成。对于这个特定的用例,我不希望我的用户等到函数完成后才收到
200
响应

所以我做
res.status(200.send()与往常一样,但我没有在执行结束时执行,而是尝试在函数开始时执行。问题是这会停止执行

作为一种解决方法,我正在考虑将重负载转移到另一个函数,并从实时数据库中的写入操作触发它,但是在单个函数中使用这种逻辑要容易得多


是否有办法绕过此限制?

在发送响应后,无法继续执行。您通过写入实时数据库触发第二个后台函数的本能是一个很好的选择(使用云发布/订阅也是一个很好的选择)


虽然这可能感觉像是额外的步骤,但通常也是一种良好的做法——您可以独立于用户关键请求路径来控制扩展处理的重试和计时语义。通常,对于消息队列来说,这种情况是一种典型的情况

在发送响应后,无法继续执行。您通过写入实时数据库触发第二个后台函数的本能是一个很好的选择(使用云发布/订阅也是一个很好的选择)


虽然这可能感觉像是额外的步骤,但通常也是一种良好的做法——您可以独立于用户关键请求路径来控制扩展处理的重试和计时语义。通常,对于消息队列来说,这种情况是一种典型的情况

谢谢你,迈克尔!这是真的吗?我正在运行这个,它工作得很好:``res.send({status:'ok',data});userActions.addNotification(通知);`它并没有停止函数的执行实际上,检查一下,我相信你可以继续执行。您不能做的是再次调用
.send
函数(但这不是这里的问题),执行可能会持续很短时间,但您不能指望它。当通过
send()
发送响应时,该函数被视为“已完成”,底层VM可能随时被拆除。此外,在没有“活动”调用的情况下,CPU和内存使用会受到硬限制。谢谢Michael!这是真的吗?我正在运行这个,它工作得很好:``res.send({status:'ok',data});userActions.addNotification(通知);`它并没有停止函数的执行实际上,检查一下,我相信你可以继续执行。您不能做的是再次调用
.send
函数(但这不是这里的问题),执行可能会持续很短时间,但您不能指望它。当通过
send()
发送响应时,该函数被视为“已完成”,底层VM可能随时被拆除。此外,当没有“活动”调用时,对CPU和内存使用进行了硬限制。