exports.handler = async (event, context, callback) => {
try {
const { headers, body } = event;
//This is where I forgot the "await" keyword
const input = ValidateInput(body); //Returns Promise
callback(null, true);
}catch(err){
console.log(err);
callback(null, false);
}
}
当调用一个返回诺言的函数而忘记创建一个await表达式诺言函数调用,而该函数拒绝诺言时,Lambda将此错误记录在cloudwatch中
(node:1) UnhandledPromiseRejectionWarning: #<Object>
解决方法很简单,不要忘了await表达式
const input = await ValidateInput(body); //Return Promise
答案 0 :(得分:0)
解决方法很简单,不要忘了await表达式
const input = await ValidateInput(body); //Return Promise
答案 1 :(得分:0)
如前所述,解决方案是确保您等待诺言:
const input = await ValidateInput(body);
但是我想我会为为什么会出现添加一些背景信息。
由于Promise可以存储在变量中并可以随时链接,因此该库无法知道Promise链在将来的某个时间是否将具有.catch关联。因此,如果未在事件循环的多次传递中处理被拒绝的Promise,则许多库的默认行为是写入控制台。这就是为什么您在日志中看到它的原因。
通常应将此警告视为暗示您尚未等待应该拥有的东西。在现实中,很少有人会故意看到它。
答案 2 :(得分:0)
AWS文档明确表示您不将callback
与异步功能一起使用。
第三个参数callback是可以调用的函数 非异步函数发送响应。回调函数需要 两个参数:错误和响应。响应对象必须是 与JSON.stringify兼容。
对于异步函数,您将响应,错误或承诺返回给 运行时而不是使用回调。
因此,您可能需要在lambda函数中修复该问题。