Javascript范围和closures,variables保持其价值

我遇到麻烦使用类方法,基本上这是一个函数范围问题(我猜)。

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当我想显示truefalse

我使用NodeJSnode-mysql

query()是一个asynchronous操作。 这意味着如果您想在查询数据库之后执行某些操作,则必须将相关的代码放在callback中。 你的代码如下所示:

 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()以便在查询数据库后调用callback函数:

 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); });