gpt4 book ai didi

mysql - NodeJS 和 MySQL : getting array data inside query callback

转载 作者:行者123 更新时间:2023-11-30 22:52:15 26 4
gpt4 key购买 nike

我正在尝试运行这段代码:

setInterval(function () {

var params = {
QueueUrl: 'https://sqs.us-east-1.amazonaws.com/821808622769/Teste', // required
MaxNumberOfMessages: 10
};
sqs.receiveMessage(params, function (err, data) {
if (err)
console.log('Erro de SQS:' + err);
else {
var retorno = data.Messages;
for (var i in data.Messages) {

var queryString = 'SELECT now()'; //dummy query, just for tests
db_connection.query(queryString, null, function (err, rows, fields) {
if (err) {
console.log('Erro no BD:' + err);
return;
}

var date = new Date();
console.log(retorno[i].Body + ' ' + date.getTime().toString());
});

}
console.log();
}
});
}, 30000);

我在 AWS SQS 中有 5 条消息,例如:

AWS table data

但是当我运行我的代码时,有时我会收到一条重复的消息,而不是每条消息的 retorno[i].Body,如图所示

Console output

我的 for 循环运行了 1 到 5 个查询,但我如何将回调中的 retorno[i] 携带到数据库查询?我的意思是,我如何确定我正在处理的是哪条消息?

最佳答案

使用 .bind() 可以将 i 的内部版本设置为与循环中 i 的版本相同。

.bind({i:i}) 在回调结束时更改内部代码以引用 this.i

for (var i in data.Messages) {

var queryString = 'SELECT now()'; //dummy query, just for tests
db_connection.query(queryString, null, function(err, rows, fields) {
if (err) {
console.log('Erro no BD:' + err);
return;
}

var date = new Date();
console.log(retorno[this.i].Body + ' ' + date.getTime().toString());
}.bind({
i: i
});
}
}

关于mysql - NodeJS 和 MySQL : getting array data inside query callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27841863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com