【发布时间】:2015-12-18 12:43:49
【问题描述】:
我有一个可供多个应用程序使用的通用模块。该模块有一个具有多种方法的对象。我通过 require 语句导入对象,但在理解如何在异步编程模型中获取返回值时遇到问题。让我在下面的过度简化的伪代码中澄清它:
文件 common_module.js:
var mysql = require('mysql');
exports.f1 = function() {
var connection_pool = mysql.createPool({host: 'xxx', user:..});
connection_pool.getConnection(function(err, connection) {
connection.query('SELECT c1 from t1 where c2 = ?', value, function(err, rows) {
value_to_return = rows[0].content; //string type
});
});
return (value_to_return);
}
主应用程序是 main.js:
db_getval = require('./common_module.js');
console.log(db_getval.f1());
它总是会抱怨 value_to_return 未定义,因为 return 语句在不等待查询完成的情况下执行(感谢异步编程模型)。虽然这是一个与 mysql 查询相关的问题,但对于许多其他场景也是如此。我该如何解决这个问题?我在这里缺少一些基本的东西......
【问题讨论】:
-
这与这是一个模块这一事实无关,而与不可能做你想做的事情有关。相反,您应该返回一个承诺,或者接受一个回调作为参数。你不能返回值。
-
@Kevin B 是的,它与模块无关。我现在意识到了。如您所知,我对这种异步编程方式还不是很满意。不完全支持 Promise。上述场景中的“接受回调” - 你能详细说明一下吗?
标签: javascript mysql node.js asynchronous require