Return 显示未定义 javascript
Return showing undefined javascript
我正在编写一个 discord 机器人来检查数据库中的点,然后 return 它们。这是我目前的代码。
function userCheck(id, name) {
date = new Date().toISOString().slice(0, 19).replace('T', ' ');
con.query("SELECT id FROM users WHERE id = "+id, function (err, row) {
if (!(row && row.length) ) {
con.query("INSERT INTO `users` (id,name,rank,points,signup) VALUES ('"+id+"', "+name+", '0', '0' , '"+date+"')"), function (err, result, fields){
if (err) throw err;
}
}else{
//fine
}
});
}
function checkPoints(user){
id = user.id;
name = con.escape(user.username);
userCheck(id, name);
console.log("SELECT points FROM users WHERE id = "+id);
con.query("SELECT points FROM users WHERE id = "+id, function (err, result, fields){
return result[0].points;
});
}
我调用这些函数的代码是这样的:
return message.author.send(checkPoints(message.author));
这会导致 discordjs 出错,因为它试图 return 一条空消息。这意味着我的功能 return 不正确。我看了一遍又一遍,它可能只是一个简单的修复,但我看不到它。
提前致谢
function checkPoints(user){
没有 return 任何东西,即与 return undefined
相同
因为 con.query 是异步的 - 最简单的解决方法是使用回调,就像这样
function checkPoints(user, cb){
id = user.id;
name = con.escape(user.username);
userCheck(id, name);
console.log("SELECT points FROM users WHERE id = "+id);
con.query("SELECT points FROM users WHERE id = "+id, function (err, result, fields){
cb(result[0].points);
});
}
checkPoints(message.author, function(result) {
message.author.send(result);
});
或者,使用 Promise
function checkPoints(user){
return new Promise(function(resolve, reject) {
id = user.id;
name = con.escape(user.username);
userCheck(id, name);
console.log("SELECT points FROM users WHERE id = "+id);
con.query("SELECT points FROM users WHERE id = "+id, function (err, result, fields){
if(err) return reject(err);
resolve(result[0].points);
});
});
}
checkPoints(message.author)
.then(function(result) {
message.author.send(result);
});
我正在编写一个 discord 机器人来检查数据库中的点,然后 return 它们。这是我目前的代码。
function userCheck(id, name) {
date = new Date().toISOString().slice(0, 19).replace('T', ' ');
con.query("SELECT id FROM users WHERE id = "+id, function (err, row) {
if (!(row && row.length) ) {
con.query("INSERT INTO `users` (id,name,rank,points,signup) VALUES ('"+id+"', "+name+", '0', '0' , '"+date+"')"), function (err, result, fields){
if (err) throw err;
}
}else{
//fine
}
});
}
function checkPoints(user){
id = user.id;
name = con.escape(user.username);
userCheck(id, name);
console.log("SELECT points FROM users WHERE id = "+id);
con.query("SELECT points FROM users WHERE id = "+id, function (err, result, fields){
return result[0].points;
});
}
我调用这些函数的代码是这样的:
return message.author.send(checkPoints(message.author));
这会导致 discordjs 出错,因为它试图 return 一条空消息。这意味着我的功能 return 不正确。我看了一遍又一遍,它可能只是一个简单的修复,但我看不到它。
提前致谢
function checkPoints(user){
没有 return 任何东西,即与 return undefined
因为 con.query 是异步的 - 最简单的解决方法是使用回调,就像这样
function checkPoints(user, cb){
id = user.id;
name = con.escape(user.username);
userCheck(id, name);
console.log("SELECT points FROM users WHERE id = "+id);
con.query("SELECT points FROM users WHERE id = "+id, function (err, result, fields){
cb(result[0].points);
});
}
checkPoints(message.author, function(result) {
message.author.send(result);
});
或者,使用 Promise
function checkPoints(user){
return new Promise(function(resolve, reject) {
id = user.id;
name = con.escape(user.username);
userCheck(id, name);
console.log("SELECT points FROM users WHERE id = "+id);
con.query("SELECT points FROM users WHERE id = "+id, function (err, result, fields){
if(err) return reject(err);
resolve(result[0].points);
});
});
}
checkPoints(message.author)
.then(function(result) {
message.author.send(result);
});