我试图将数据库的数据推入数组,但是在这里我遇到了一点问题,当我尝试setup
时,它显示为空。
这是我的代码:
console.log
任何人都可以帮助我吗?
答案 0 :(得分:2)
如注释中所述,conn.query
是异步的。因此您提供的回调函数会在以后已经通过控制台记录下来的某个时候调用。
您可以使用诺言来解决您的问题:
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));
此外,您可以使用arr.map
方法来改善代码,如下所示:
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));
有了promise,您还可以使用async-await:
(
async function () {
let arrTodo = await getQuery();
console.log(arrTodo);
}
)()
答案 1 :(得分:-2)
尝试一下。
var arrTodo =[];
conn.query(todoq,function(err, rows, fields) {
rows.forEach(function(detail){
arrTodo.push(detail.name);
});
console.log(arrTodo);
});