gpt4 book ai didi

javascript - 函数的返回值未定义

转载 作者:行者123 更新时间:2023-11-28 23:24:07 24 4
gpt4 key购买 nike

我一直卡在这个问题上,我不知道哪里出了问题。我有一个名为 Databse.js 的单独类,它运行 MySQL 函数,它管理连接、查询等。我一直试图让它从它应该返回的第一行中获取信息(具有正确用户名和密码的用户) 但是它说变量未定义。如果我在返回之前在函数中记录对象字段,它们都可以正常工作。

这是带有更多上下文的代码:

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) 的函数才会返回值。由于查询函数是异步的,它应该返回 promise。或在通话就绪时调用回调。您应该阅读更多有关回调和 promise 的信息。这里:http://sporto.github.io/blog/2012/12/09/callbacks-listeners-promises/

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

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

并以这种方式使用 promise

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

关于javascript - 函数的返回值未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com