查询数据库后查询内容是否可以保存到变量中
发布于 9 年前 作者 miyazawatomoka 5244 次浏览 最后一次编辑是 8 年前 来自 问答

在node中,通常查询数据库是在回调函数中处理查询结果的。如:

function query("sql",function(data){
		处理查询结果
});

我让这个query函数直接返回出查询结果,保存到某个变量中,再做处理,请问有没有什么办法?

补充: 我是想实现这样一个内容。 在程序启动的时侯,查询数据库,得到一些信息,并保存在一个变量中供其他的函数调用。

5 回复

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;
	处理查询结果
});

但是这样会遇到一个问题,下面需要调用这里的数据的时候,每次都要额外的对数据是否准备好进行检查。 然而上面的想法是一种同步的思维,写起来会很丑。不知道有没有什么更好的方案。

回到顶部