CNode

查询数据库后查询内容是否可以保存到变量中

问答
Mmiyazawatomoka发布于11 年前最后回复11 年前5 回复5752 浏览0 收藏

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

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

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

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

查看回复

回复 (5)

I
im-here#1·11 年前

query(“sql”,function(error,data){ data 就是查询结果。 });

M
mcc285361464#2·11 年前

比如用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; } }); });

E
echoloyuk#3·11 年前

你是想让query这个函数return出查询的结果么?实际上比较困难,这是一种同步思维,我早些也在这里发帖问过,不过摸索了很久发现这样并不可以。 例如:

var data = query('sql', ....)

这样是不行的。因为查询sql的过程是异步的,数据返回的结果通过回调来处理。但是你可以这样:

async.waterfall([
	function (next){
		query('sql', function (data){
			next(null, data);
		});
	}, function (data, next){
		var result = data;
		//做自己的处理
	}
])
D
DevinXian#4·11 年前

这个函数是有返回值的,但不是你要的查询结果。异步先callback下,后续在学习promise一类的

M
miyazawatomoka#5·11 年前

谢谢大家的解答。 目前是通过设置一个标记变量,来判定数据是否可用来完成这件事的。

var saveData;
var isDataOK=0;
function query(“sql”,function(data){
	isDataOK=1;
	saveData = Data;
	处理查询结果
});

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

参与回复
登录后即可参与回复。登录