Javascript 如何让这个节点等待工作完成?
我是nodejs的新手 我有一个AWS lambda,它读取队列并在处理消息后删除它们:Javascript 如何让这个节点等待工作完成?,javascript,node.js,aws-lambda,Javascript,Node.js,Aws Lambda,我是nodejs的新手 我有一个AWS lambda,它读取队列并在处理消息后删除它们: const AWS = require('aws-sdk'); AWS.config.logger = console; const sqs = new AWS.SQS({apiVersion: '2012-11-05'}); const redriveQueueUrl = 'https://myqueue"; async function deleteMessage (messageToDelete)
const AWS = require('aws-sdk');
AWS.config.logger = console;
const sqs = new AWS.SQS({apiVersion: '2012-11-05'});
const redriveQueueUrl = 'https://myqueue";
async function deleteMessage (messageToDelete) {
let params = {
QueueUrl: redriveQueueUrl,
ReceiptHandle: messageToDelete.ReceiptHandle
};
sqs.deleteMessage(params, function (err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
}
exports.handler = async (event) => {
var params = {
QueueUrl: redriveQueueUrl,
MaxNumberOfMessages: '2',
};
let sqsResponse = await sqs.receiveMessage(params).promise();
let messages = sqsResponse.Messages
for (let index in messages) {
// do something here later.
await deleteMessage(messages[index]);
};
const response = {
statusCode: 200,
body: JSON.stringify('End of Lambda!'),
};
return response;
};
此代码正确读取给定队列,但不删除任何消息。
如何解决此问题?
sqs.deleteMessage
需要返回承诺。否则调用wait sqs.deleteMessage()
将立即返回
试试这个:
async function deleteMessage (messageToDelete) {
let params = {
QueueUrl: redriveQueueUrl,
ReceiptHandle: messageToDelete.ReceiptHandle
};
return new Promise((resolve, reject)=>{
sqs.deleteMessage(params, function (err, data) {
if (err) return reject(err);
else return resolve(data);
});
})
}
我估计您的
sqs.deleteMessage
函数也是异步的,但是您没有将wait
放在它前面。因此,它将无需等待即可运行。