我有一个正在调用的函数,我需要在该函数内进行一些数据库查询。在节点中执行此操作的最佳方法是什么?目前,我只是发出请求,并将返回值分配给变量,但这导致未设置变量。例:
// bunch of code
var is_member = false;
mysql.query('SELECT EXISTS ( SELECT * FROM `qazusers` WHERE `qazemail` = ? OR `otheremail` = ? LIMIT 1)', [emailaddress, emailaddress], function (err, result) {
if (err) {
logger.info('Error checking. ', err);
}
logger.info('checkmembership: ', result);
if (result[0] === 1) {
is_member = true;
}
// bunch more code finishing out the function this is inside
一旦包含函数运行完毕,
is_member
始终为false。我认为这是由于节点的异步性质引起的,但是,处理此问题的最佳方法是什么?我已经阅读了一些Promises(例如Q库),但是仍然不确定在基于nodejs的函数中设置变量的最佳方法。理想情况下将如何进行? 最佳答案
承诺是一种很好的方法。您将像这样使用它们:
var promise = Q.ninvoke(mysql, "query", 'SELECT EXISTS ( SELECT * FROM `qazusers` WHERE `qazemail` = ? OR `otheremail` = ? LIMIT 1)', [emailaddress, emailaddress])
var moreresults = promise.then(function(result) {
logger.info('checkmembership: ', result);
return result[0] === 1;
}).then(function(is_member) {
// bunch more code finishing out
return more;
});
moreresults.catch(function(err) {
logger.info('Error checking. ', err);
});