返回响应后,Lambda 可以继续吗?

Ste*_*ven 3 asynchronous aws-lambda serverless

Lambda 是否可以在返回像状态代码这样的响应后继续处理,202然后 Lambda 在结束 Lambda 之前必须调用请求?

小智 9

您可以使用两个 lambda。第一个 lambda (lambda 1) 将对保存代码的 lambda (lambda 2)进行异步调用。一旦调用它,您就可以干净地退出“lambda 1”,而无需等待“lambda 2”返回响应。


doo*_*oms 8

仅使用 AWS Lambda 是不可能的。

您可能需要研究 AWS Step Functions来解决您的问题。

  • 您自己尝试过吗?或者您对此断言有权威引用吗?您能更详细地说明发生的情况吗?如果我有一个 Node Lambda,当我返回一个值时,有一些待处理的承诺,到底会发生什么?Lambda 主机虚拟机是否被暂停?TIA (4认同)

Par*_*igm 6

关于在函数返回响应之前启动的后台进程或回调,来自 Lambda文档

如果 AWS Lambda 选择重用执行上下文,则由您的 Lambda 函数启动但在函数结束时未完成的后台进程或回调将恢复。在代码退出之前,您应该确保代码中的任何后台进程或回调都已完成。

在编写 Lambda 函数代码时,不要假设 AWS Lambda 会自动为后续函数调用重用执行上下文。其他因素可能要求 AWS Lambda 创建新的执行上下文,这可能导致意外结果,例如数据库连接失败。

此外,对于使用非异步处理程序的Node.js Lambda 函数:

对于非异步处理程序,函数继续执行,直到事件循环为空或函数超时。在所有事件循环任务完成之前,不会将响应发送给调用者。如果函数超时,则会返回错误。您可以通过设置context.callbackWaitsForEmptyEventLoop为 false将运行时配置为立即发送响应。