2016-05-05 107 views
0

所以我想弄清楚为什么我每次返回的对象只是[]? 这里是我的代码:节点/ JSON问题

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 :'---'}; 

对于某些原因,当我打印返回object值他们是正确的,但,当它到达的JSON.stringify有事发送到我的SQS队列只是[]。

我想也许摆脱标记变量的和公正的分配

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

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

回答

0

JavaScript中的数据库查询通常是异步的。这意味着您的回调函数function(err, rows, fields)中的代码将仅在数据库查询完成后运行,而您将分配给sqsParams将在数据库查询已启动开始之后立即完成。结果是您的回调函数中的代码尚未在returnObjectJSON.stringify之间运行,并且它仍处于其原始值[]

+0

哈啊duhh。我想知道为什么。只是弹出所有的数据库调用,我们正在完美的工作!谢谢! – wdlax11

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 
});