函数的返回值是未定义的

我一直坚持这一段时间,我不知道什么是错的。 我有一个名为Databse.js的单独的类,它运行MySQL函数,它pipe理连接,查询等。我一直试图从它应该返回的1行获取信息(具有正确用户名和密码的用户)但是它说这个variables是未定义的。 如果我在返回它之前logging函数中的对象字段,它们都可以正常工作。

这里是更多的上下文的代码:

socket.on('loginAttempt', function(data) { //Check credentials with database... try { var fuser = Database.checkAccount(data.username, data.password); if (fuser === undefined) {//This is always being called console.log("fuser is undefined");//For debug only } } catch(err) { console.log(err.message); } try { if (fuser !== undefined) { socket.emit('loginMessage', {status:true}); socket.id = Math.random(); SOCKET_LIST[socket.id] = socket; var player = Player(socket.id, fuser.Username, fuser.Rank, fuser.Points); PLAYER_LIST[socket.id] = player; return; } socket.emit('loginMessage', {status:false}); } catch(err) { console.log(err.message); } }); 

这是调用有问题的对象的函数,这里是Databse.js的checkAccount()函数(如果有帮助,我已经包含了我的module.exports):

 function checkAccount(username, password) { con.query("SELECT * FROM Userbase WHERE Username='" + username + "' AND Password='" + password + "';", function(err, rows) { if (err) throw err; if (rows.length > 0) { var returnedUser = new User(); returnedUser.Username = username; returnedUser.Password = password; returnedUser.Rank = rows[0].Rank; returnedUser.Points = rows[0].Points; return returnedUser; // This should return the User object however when run in my app.js it is undefined } return null; }); 

}

 module.exports.mysql = mysql; module.exports.con = con; module.exports.checkAccount = checkAccount; module.exports.User = User; module.exports.init = init; 

任何帮助,将不胜感激! C:

你的function checkAccount(username, password) {没有返回值。

只有传递给query(query, callback)的函数返回一个值。 由于查询function是asynchronous的,它应该在呼叫准备就绪时返回一个承诺或者调用一个callback函数。 你应该阅读更多关于callback和承诺fe在这里: http : //sporto.github.io/blog/2012/12/09/callbacks-listeners-promises/

根据你使用的数据库实现,查询函数可能会返回一个promise,比你可以这样做:

 function checkAccount(username, password) { return con.query(... 

并以这种方式使用诺言

 checkAccount(xxx).then(function(data) { // your data is here });