在node中,通常查询数据库是在回调函数中处理查询结果的。如:
function query("sql",function(data){
处理查询结果
});
我让这个query函数直接返回出查询结果,保存到某个变量中,再做处理,请问有没有什么办法?
补充: 我是想实现这样一个内容。 在程序启动的时侯,查询数据库,得到一些信息,并保存在一个变量中供其他的函数调用。
query(“sql”,function(error,data){ data 就是查询结果。 });
比如用express框架 router.post(’/changeSchool’,function(req, res, next) { var province = req.body.province; var shcools = null; //初始化变量 conn.query(‘select schoolName from t_school where province=?’,[province],function(err,results){ if(err) { console.log(err); }else { //这里就是给变量赋值。 schools = results; } }); });
你是想让query这个函数return出查询的结果么?实际上比较困难,这是一种同步思维,我早些也在这里发帖问过,不过摸索了很久发现这样并不可以。 例如:
var data = query('sql', ....)
这样是不行的。因为查询sql的过程是异步的,数据返回的结果通过回调来处理。但是你可以这样:
async.waterfall([
function (next){
query('sql', function (data){
next(null, data);
});
}, function (data, next){
var result = data;
//做自己的处理
}
])
这个函数是有返回值的,但不是你要的查询结果。异步先callback下,后续在学习promise一类的
谢谢大家的解答。 目前是通过设置一个标记变量,来判定数据是否可用来完成这件事的。
var saveData;
var isDataOK=0;
function query(“sql”,function(data){
isDataOK=1;
saveData = Data;
处理查询结果
});
但是这样会遇到一个问题,下面需要调用这里的数据的时候,每次都要额外的对数据是否准备好进行检查。 然而上面的想法是一种同步的思维,写起来会很丑。不知道有没有什么更好的方案。