我在使用类方法时遇到了麻烦,基本上它是函数范围问题(我猜)。
JS代码是:
MysqlClass.prototype.registrar = function(usuario,password,correo,socket){
var resultado;
this.connection.query("SELECT usuario FROM usuarios WHERE usuario=?;",[usuario],function(err,rows,fields){
if(err){
resultado = true;
}
if(rows.length==1){
resultado = true;
}else{
resultado = false;
}
});
console.log(resultado);
}
当我想展示console.log(resultado)
或undefined
时, true
会显示false
我正在NodeJS
使用node-mysql
答案 0 :(得分:5)
query()
是一个异步操作。这意味着如果您想在查询数据库后执行某些操作,则必须将相关代码放在回调中。您的代码如下:
MysqlClass.prototype.registrar = function(usuario,password,correo,socket){
var resultado;
this.connection.query("SELECT usuario FROM usuarios WHERE usuario=?;",[usuario],function(err,rows,fields){
if(err){
resultado = true;
}
if(rows.length==1){
resultado = true;
}else{
resultado = false;
}
console.log(resultado);
});
}
您可能需要重写registrar()
,以便在查询数据库后调用回调函数:
MysqlClass.prototype.registrar = function(usuario, password, correo, socket, cb) {
var resultado;
this.connection.query("SELECT usuario FROM usuarios WHERE usuario=?;",[usuario],function(err,rows,fields){
if(err){
resultado = true;
}
if(rows.length==1){
resultado = true;
}else{
resultado = false;
}
cb && cb(resultado);
});
}
并使用它:
var MysqlClassInstance = new MysqlClass();
// ...
MysqlClassInstance.registrar(usuario, password, correo, socket, function (resultado) {
console.log(resultado);
});