【发布时间】:2014-04-10 20:40:57
【问题描述】:
我有一个正在调用的函数,我需要在该函数内部进行一些数据库查询。在节点中执行此操作的最佳方法是什么?目前我只是提出一个请求并将返回值分配给一个变量,但这导致变量没有被设置。示例:
// 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 的函数中设置变量的最佳方法。理想情况下如何做到这一点?
【问题讨论】:
-
所以我需要将其余的函数内容嵌套在 mysql 调用的成功部分中吗?如果我必须进行 3 或 4 个 mysql 调用,那么它们每个都必须嵌套得越来越深?这看起来很尴尬而且不理想?
-
是的,欢迎来到异步编程的世界! :-) 如果您对这样的解决方案不满意,请传入函数引用而不是匿名函数,或者查看下面 Bergi 的答案以获取基于 Promises 的解决方案。
标签: javascript node.js asynchronous