我是来自PHP背景的Node.js初学者
我正在使用mysql,模块node-mysql
(Github:felixge / node-mysql),不幸的是它是异步的。
调试行“__2”出现在“__1”之前,因此函数在查询发生之前返回
我该怎么办?
var db = require('../classes/db.js')
var method = Usuario.prototype;
function Usuario() {
// constructor
}
method.doAuth = function(usuario, senha) {
var retorno = 0
var sql = 'SELECT * from `tb_usuario` WHERE `usuario` = ? and `senha` = ?'
db.query(sql, [usuario, senha], function(err, rows, fields) {
if (err) throw err
console.log("__1")
if(rows.length > 0)
retorno = rows[0].id
})
console.log("__2")
return retorno
}
module.exports = Usuario
答案 0 :(得分:1)
method.doAuth = function(usuario, senha, callback) {
db.query(sql, [usuario, senha], function(err, rows, fields) {
....
if(rows.length > 0)
retorno.id_usuario = rows[0].id;
return callback(error, usuario);
});
doAuth(usuario, senha, function(error, result) {
//handle error and result
});
答案 1 :(得分:0)
您必须将此作为节点的一部分。您可以使用各种不同的范例来处理它。最简单的是节点的首选CPS:
method.doAuth(usuario, senha, callback) {
db.query(query, functoin (err, rows, fields) {
callback(err, fields);
});
};
然后你会这样称呼:
lib.doAuth("key", "value", function (err, fields) {
if (err) throw err;
// do stuff with the rows
});
答案 2 :(得分:-1)
deasync正是您要找的。这将得到您想要的结果:
method.doAuth = function(usuario, senha) {
var retorno = 0
var sql = 'SELECT * from `tb_usuario` WHERE `usuario` = ? and `senha` = ?'
var rows
try{
rows = require('deasync')(db.query)(sql, [usuario, senha])
}
catch(err) throw err
console.log("__1")
if(rows.length > 0)
retorno = rows[0].id
})
console.log("__2")
return retorno
}