Problema com retorno de função
Olá,
Estou desenvolvendo um sisteminha de Chat integrado com PHP com NodeJS (javascript sever-side, para quem não conhece) e me deparei com um problema, porém, não é necessário saber sobre Node para resolver este problema, somente Javascript mesmo.
check: function(token, ip, agent)
{
var ret = null
if (this.list[token] === null || typeof(this.list[token]) != 'object')
{
var MySQL_Client = require('./lib/mysql').Client
var client = new MySQL_Client()
client.port = MySQL.port
client.host = MySQL.host
client.user = MySQL.user
client.password = MySQL.pass
client.connect(function(err, res)
{
if (err)
{
console.log('Erro MySQL: ' + err.message)
return
}
client.query('USE ' + MySQL.name, function(err, res)
{
if (err)
{
console.log('Erro MySQL: ' + err.message)
return
}
client.query("SELECT * FROM chat_sessions WHERE token = '" + token + "' AND ip = '" + ip + "' AND agent = '" + phpjs.addslashes(agent) + "'", function(err, res, fields)
{
if (err)
{
console.log('Erro MySQL: ' + err.message)
return
}
if (res.length)
{
sessions.list[token] = {
'uid': res[0].uid,
'nick': res[0].nick,
'token': token,
'ip': ip,
'agent': agent,
'mod': res[0].mod,
'updated': phpjs.time()
}
console.log('achou');
ret = true
}
else
{
ret = false
}
})
})
})
}
else if (this.list[token].ip == ip && this.list[token].agent == agent)
{
ret = true
}
console.log('retornando...');
return ret
},
Ao lerem a função, verão que checarei se uma variável existe: se não, crio uma conexão MySQL utilizando várias funções e depois utilizo a variável "ret" para guardar o valor de retorno, para no final, a função principal retornar este valor. O meu problema é que a função está retornando o "ret" antes dos códigos MySQL serem executados, pelo o que pude constatar adicionando logs no console e checando pelo terminal:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img412.imageshack.us/img412/9484/consolesa.png&key=ce0a1f0b7c7cb0d2611c01cb64562c80437925fb19cb995d25f76464f689bda3" alt="consolesa.png" />
Notem que o "retornando..." aparece antes do "achou", que é um código situado acima. Até agora não consegui pensar em nenhuma maneira da função esperar o MySQL executar para retornar o valor; pensei em usar um setInterval que checasse quando o ret muda de valor de "null" pra true ou false, porém não vejo meio de retornar o valor.
Por favor, me ajudem!
Discussão (5)
Carregando comentários...