这是我在路由中的代码
router.get('/chkjson', function(req, res, next) {
req.getConnection(function(err,connection){
var ItemArray = [];
var myset = [];
var query = connection.query('SELECT `db_name` FROM `database`',function(err,rows)
{
ItemArray.push({
allDb : []
});
var k=0;
for (var i in rows) {
retset = JSON.stringify(rows[i]);
var jsonset = JSON.parse(retset);
console.log(ItemArray);
console.log("========");
myset.push(ItemArray);
ItemArray[0].allDb.push(jsonset.db_name);
}
});
console.log(myset); //blank array
console.log("-----");
console.log(ItemArray); //blank array
console.log("-----");
res.render( 'new/post-select-table',
{
title: 'Select Database',
session_store:req.session,
});
});
});
当我尝试在 for 循环外打印数组时,我得到的是空白数组。任何人都可以帮助我哪里出错了。
最佳答案
connection.query()
是异步的,在您的代码中,您在查询回调之外记录 ItemArray
。该数组将为空,因为它尚未设置任何内容(即您的回调还没有触发结果)。以下将您的 console.log
和渲染函数移到 for 循环之外,但在回调内部,因此它应该按预期打印 ItemArray 的最终结果:
router.get('/chkjson', function(req, res, next) {
req.getConnection(function(err,connection){
var ItemArray = [];
var myset = [];
var query = connection.query('SELECT `db_name` FROM `database`',function(err,rows)
{
ItemArray.push({
allDb : []
});
var k=0;
for (var i in rows) {
retset = JSON.stringify(rows[i]);
var jsonset = JSON.parse(retset);
console.log(ItemArray);
console.log("========");
myset.push(ItemArray);
ItemArray[0].allDb.push(jsonset.db_name);
}
console.log(myset); //blank array
console.log("-----");
console.log(ItemArray); //blank array
console.log("-----");
res.render( 'new/post-select-table',
{
title: 'Select Database',
session_store:req.session,
});
});
});
});
关于javascript - 无法在 node.js 中打印数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44352472/