Well as mentioned in comments, conn.query
is asynchronous. so the callback you provide, is called at sometime later on while you've already console logged it.
You can use a promise to fix your problem:
function getQuery() {
return new Promise(function (resolve, reject) {
conn.query(todoq,function(err, rows, fields) {
var arrTodo = [];
if (err) {
return reject(err);
}
rows.forEach(function(detail){
arrTodo.push(detail.name);
});
return resolve(arrTodo);
});
});
}
getQuery().then(arrTodo => console.log(arrTodo)).catch(err => console.error(err));
Also, you could improve your code a bit using arr.map
method, like this:
function getQuery() {
return new Promise(function (resolve, reject) {
conn.query(todoq,function(err, rows, fields) {
if (err) {
return reject(err);
}
let arrTodo = rows.map(function(detail){
return detail.name;
});
return resolve(arrTodo);
});
});
}
getQuery().then(arrTodo => console.log(arrTodo)).catch(err => console.error(err));
With promises, you can also use async-await:
(
async function () {
let arrTodo = await getQuery();
console.log(arrTodo);
}
)()