gpt4 book ai didi

Javascript 作用域和闭包,变量保持其值

转载 作者:行者123 更新时间:2023-11-30 08:49:41 24 4
gpt4 key购买 nike

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

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) 在我想显示 truefalse 时显示 undefined

我正在使用 NodeJSnode-mysql

最佳答案

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

关于Javascript 作用域和闭包,变量保持其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013142/

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