Javascript Scope和Closure,变量保持其值

时间:2013-09-25 19:04:59

标签: javascript node.js class

我在使用类方法时遇到了麻烦,基本上它是函数范围问题(我猜)。

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

1 个答案:

答案 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);
});
相关问题