所以我试图弄清楚为什么每次返回的对象只是[]? 这是我的代码:
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
};
但这仍然会导致同样的问题。有任何想法吗?谢谢!
答案 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
});