我在运行使用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再次测试了一次:
答案 0 :(得分:0)
您的代码将在调用回调之前立即返回。这就是为什么它在第一个示例中起作用的原因。
尝试将await
添加到示例Promise
的前面,以便节点在继续操作之前完成工作。
const value = await delay(5000)
callback(null, value)