我正在尝试创建一个可重用的代码来查询数据库(带有一些参数),然后对这些数据执行操作并返回一些新创建的数据。我大概看起来像这样:
function loadList(config) {
var list = [];
var queryString = "SOME QUERY STRING BASED ON THE config PARAMETER";
connection.query(queryString, function (err, result) {
if err throw err;
for (var i = 0; i < result.length; i++) {
//Perform some action on the data
//IMPORTANT this changes the list variable
}
});
return list;
}
现在,这段代码不起作用,该函数几乎在每种情况下都会返回[]
。这是因为return list
在查询回调运行之前很久就被执行了。但是,我无法为上帝之爱弄清楚如何构建我的代码,父函数的return list
在查询和回调之后运行 ave被执行了。可能是因为我累了,但我真的看不到它的解决方案。
我曾想过在查询中调用loadList()
内的新回调函数,但是如果我从该回调中调用return list
,它只会返回list
回调,而不是父函数。
实现此目的的正确方法是什么?
答案 0 :(得分:2)
您应该使用回调基本函数,如下所示:
function loadList(config, callback) {
// check that callback is not null
callback = callback || function() {};
var list = [];
var queryString = "SOME QUERY STRING BASED ON THE config PARAMETER";
connection.query(queryString, function(err, result) {
if (err) {
return callback(err);
}
for (var i = 0; i < result.length; i++) {}
// after you done your work call the call back
return callback(null, list);
});
}
用法:
loadList(config_here, function(err, list) {
if (err) {
// do something with err
}
// here you have the list
})