我的db.js
中有getName函数function getName(uid){
db.all("SELECT name FROM table WHERE uid = ? ", function (err){
if(err){
console.log(err);
}else{
console.log(this);
}
});
}
我想获取名称并将其保存到另一个文件中的var名称。
var uid = req.session.user;
var name = db.getName(uid);
console.log(name);
db函数getname有什么问题我为什么不定义? 如果你可以帮助我会很棒!
答案 0 :(得分:2)
从异步函数返回数据可能会返回undefined,因为在执行return语句时数据库请求可能尚未完成。
function getName(uid, callback){
var query = "SELECT name FROM table WHERE uid = " + uid;
var name = null;
db.all(query, function (err, rows) {
if(err){
console.log(err);
}else{
name = rows[0].name;
}
});
return name; <--- this can be execute before db.all() if executed therefore returning null. This is because javascript runs asynchronously.
}
数据库查询的结果需要在回调中传递,或者可以保存在全局变量中。
function getName(uid, callback){
var query = "SELECT name FROM table WHERE uid = " + uid;
db.all(query, function (err, rows) {
if(err){
console.log(err);
}else{
callback(rows[0].name);
}
});
}
为了从另一个文件执行:
function print(name) {
console.log(name);
}
var uid = req.session.user;
getName(uid, print);