在一个节点函数中进行数据库调用

我有一个函数,我打电话,我需要在该函数内进行一些数据库查询。 什么是在节点做这个最好的方法? 目前我只是做一个请求,并将返回值分配给一个variables,但这导致variables不被设置。 例:

// 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_memberis_member总是为false。 我认为这是由于节点的asynchronous性质,但是,处理这个问题的最好方法是什么? 我读了一些Promises(如Q库),但我仍然不确定如何处理基于nodejs的函数中设置variables的最佳方法。 怎么做,理想呢?

承诺是一个好方法。 你会像这样使用它们:

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