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