我有一个Lambda函数,该函数未运行我正在等待使用的异步函数。我猜还有其他事情是异步的,尽管我不确定redis
包的文档中没有讨论我看到的承诺或异步问题,但我仍需要等待。我尝试将await
放在clienthmset...
前面,但是VS Code说我等不及了。我有什么方法可以使其正常运行?
这是我想出的最少可复制代码,请注意,此示例中未包括的唯一内容是记录器,导入和客户端设置(具有密码和主机名)
const loadRedis = async (message) => {
client.hmset(`${message.region}:${message._id}`, message, (err, res) => {
if(err) {
logger.error(`Error: ${JSON.stringify(err)}`)
reject(err)
}
if(res) {
logger.info(`Response: ${JSON.stringify(res)}`)
resolve(res)
}
})
}
module.exports.loader = async (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
let input = JSON.parse(event.Records[0].body);
let message = input.Message
const result = await loadRedis(message)
logger.info(message)
logger.info(result)
let output = result
callback(null, output);
};
CloudWatch Logs中的日志显示正在查找消息日志,但返回的结果除了日志级别外什么都没有。
答案 0 :(得分:0)
loadRedis
被声明为async
,但是您不返回任何内容,因此它实际上并不是在等待任何内容。
可能您只需要这样做:
const loadRedis = async (message) => {
return new Promise((resolve, reject) => {
return client.hmset(`${message.region}:${message._id}`, message, (err, res) => {
if(err) {
logger.error(`Error: ${JSON.stringify(err)}`)
reject(err)
}
if(res) {
logger.info(`Response: ${JSON.stringify(res)}`)
resolve(res)
}
})
}
}