NodeJS和MySQL:在查询回调中获取数组数据
我正在尝试运行这段代码:NodeJS和MySQL:在查询回调中获取数组数据,mysql,node.js,amazon-sqs,Mysql,Node.js,Amazon Sqs,我正在尝试运行这段代码: setInterval(function () { var params = { QueueUrl: 'https://sqs.us-east-1.amazonaws.com/821808622769/Teste', // required MaxNumberOfMessages: 10 }; sqs.receiveMessage(params, function (err, data) { if
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条消息,例如:
但当我运行代码时,有时会重复一条消息,而不是让每条消息的returno[I].正文,如图所示
我的for循环运行1到5个查询,但是如何将returno[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库?你能从文档中发布一个链接,我可以在这里阅读更多关于它的信息吗?bind函数是ECMAScript(JavaScript)规范的一部分。