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)规范的一部分。