异步 for 循环不将 sqs 消息放入队列

jos*_*132 2 for-loop node.js aws-lambda

我正在尝试在 Lambda 函数内部运行一个 for 循环,该循环将解析 SQS 消息并将其发送到某个队列。目前它正在运行 for 循环并正确创建参数(我通过日志记录检查),并且在 for 循环外部/之后运行一条日志消息,表示 lambda 已完成。

问题是 SQS 消息未发送和/或到达 SQS 队列。

我没有包含 lambda 函数的其余部分,因为它只是噪音,与问题无关,因为它已经正确运行,唯一的问题是 sqs 消息。

for (var i = 0; i < dogs.length; i++) {
      let MessageBody = JSON.stringify(dogs[i]);

            let params = {
                MessageBody,
                QueueUrl: process.env.serviceQueue,
                DelaySeconds: 0
            };
            sqs.sendMessage(params, function(err, data) {
                if (err) {
                    logger.error(`sqs.sendMessage: Error message: ${err}`);
                } else {
                    let stringData = JSON.stringify(data);
                    logger.info(`sqs.sendMessage: Data: ${stringData}`);
                }
            });
    }
Run Code Online (Sandbox Code Playgroud)

Los*_*Jon 5

迭代多个异步请求,并使用回调会导致灾难和混乱的代码。我推荐以下内容(使用异步/等待)

await Promise.all(dogs.map(async (dog) => {
  let params = {
    MessageBody: JSON.stringify(dog),
    QueueUrl: process.env.serviceQueue,
    DelaySeconds: 0
  }
  let data = await sqs.sendMessage(params).promise().catch(err => {
    logger.error(`sqs.sendMessage: Error message: ${err}`);
  });
  logger.info(`sqs.sendMessage: Data: ${JSON.stringify(data)}`);
}));
Run Code Online (Sandbox Code Playgroud)