节点/ JSON问题

时间:2016-05-05 20:17:25

标签: javascript sql json node.js

所以我试图弄清楚为什么每次返回的对象只是[]? 这是我的代码:

var returnObject = [];

db.query(queryString, function(err, rows, fields) {
if (err) throw err;

for (var i in rows) 
{
  console.log('Data: ', rows[i]);

  var marker = 
  {
    o_ID:rows[i].o_ID,
    data:rows[i].data
  };

  returnObject[i]=marker;

  console.log(chalk.red(returnObject[i].o_ID));
  console.log(chalk.red(returnObject[i].data));

}
});

var sqsParams = {MessageBody: JSON.stringify(returnObject), QueueUrl :'---'};

由于某些原因,当我打印returnObject值时它们是正确的但是当它到达JSON.stringify时会发生一些事情并发送到我的SQS队列只是[]。

我想可能会删除标记变量而只是分配

returnObject[i]=   {
    o_ID:rows[i].o_ID,
    data:rows[i].data
  };

但这仍然会导致同样的问题。有任何想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

JavaScript中的数据库查询通常是异步的。这意味着回调函数function(err, rows, fields)中的代码将在数据库查询完成后仅运行,而您在sqsParams的赋值将在数据库查询后立即完成已经启动。结果是回调函数中的代码尚未在returnObject JSON.stringify之前运行,并且仍然保持原始值[]

答案 1 :(得分:0)

您的sqsParams变量正在db.query回调之外设置。由于db.query是异步的,因此您的代码将通过一个空数组来实现。

将sqsParams变量移动到您要提供给db.query的回调中,例如:

        console.log(chalk.red(returnObject[i].o_ID));
        console.log(chalk.red(returnObject[i].data));
    }
    var sqsParams = {MessageBody: JSON.stringify(returnObject), QueueUrl :'---'};
    // Use sqsParams here
});