即使添加了等待,Lambda函数也不会运行其他异步函数

时间:2020-11-10 00:48:33

标签: javascript node.js asynchronous redis async-await

我有一个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中的日志显示正在查找消息日志,但返回的结果除了日志级别外什么都没有。

1 个答案:

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