[英]Simple AWS Lambda response is null if callback is called in different context
在运行将AWS Lambda与NodeJS一起编写的某些代码时,我遇到了问题。 我花了一些时间来缩小问题范围,但最终我注意到,如果我从不同于处理程序函数上下文的上下文中调用回调函数,则响应值为null。
这是我用来测试的简单函数
exports.handler = async (event, context, callback) => {
callback (null,{
statusCode: 201,
headers: {
"Content-Type": "text/html"
},
body: {}
});
}
如果我使用此代码运行测试事件(测试脚本为空JSON),则结果很简单:
Response:
{
"statusCode": 201,
"headers": {
"Content-Type": "text/html"
},
"body": {}
}
但是,如果我仅强制在不同的上下文中调用回调函数,如下例所示:
exports.handler = async (event, context, callback) => {
setTimeout(function() {
callback (null,{ // <-- callback is now called in timer context
statusCode: 201,
headers: {
"Content-Type": "text/html"
},
body: {}
})}, 5000);
}
然后,运行完全相同的测试事件(空JSON)将导致响应为空:
Response:
null
现在在我看来,这似乎是一个非常基本的功能,我只是假设我在这里遗漏了一些东西。 谁能帮我查明我的错误? 或说明即使在不同的上下文中调用了回调,响应值如何也可以包含所需的值? 谢谢!
更新#1使用promise再次测试了一次:
您的代码将在调用回调之前立即返回。 这就是为什么它在第一个示例中起作用的原因。
尝试将await
添加到Promise
示例的前面,以便该节点在继续之前完成工作。
const value = await delay(5000)
callback(null, value)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.