【发布时间】:2014-10-16 18:54:48
【问题描述】:
我是来自 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
【问题讨论】:
-
doAuth本身必须遵循异步范式 - 例如使用回调(或承诺)来恢复下一个动作的执行。一般来说,不能随意“切换回来”。 -
你能给我举个例子吗?
-
这是同一个问题,有 [一些] 相同的解决方案,如 stackoverflow.com/a/14220323/2864740 中所讨论的(仅在 Node 的上下文中;我是 Promises/A 与临时回调的粉丝。 )
-
对于 Promise(我再次推荐),请参阅 stackoverflow.com/questions/4296505/… 、 howtonode.org/promises 、 strongloop.com/strongblog/… 等。
标签: node.js asynchronous