lambda函数不运行其他异步函数,即使添加了await

anauzrmj  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(360)

我有一个lambda函数,它没有运行我正在使用的异步函数wait on。我猜其他的东西是异步的,我需要等待它,虽然我不确定什么可以/应该等待'作为文档的 redis 我看到的包没有提到承诺或异步。我试着把 await 在门前 clienthmset... 但是vs代码说我等不及了。我有什么办法让它正常运行?
这里是我提出的最小可复制代码,注意这个例子中没有包括的只有我的日志、我的导入和我的客户机设置(有密码和主机名)

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日志中的日志显示消息日志即将被找到,但结果日志返回时除了日志级别之外什么都没有。

nxowjjhe

nxowjjhe1#

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)
      }
    })
  }
}

相关问题