开始玩节点,但仍然很新。我有以下代码,是否可以从x中返回“结果”?
function dbRequest(sql) {
var x;
var dbResults = client.query(sql, function (err,results,fields) {
if (err) {
throw err;
}
x = results;
client.end();
});
// I want x here to return what is in results.
return x;
}
答案 0 :(得分:1)
没有。至少不是你尝试过的方式。
最有可能的是,调用client.query()
将启动节点的异步请求。这反过来意味着代码执行将立即继续,因此,在回调填充之前,它将返回x
的值。
处理这类内容的一种非常方便的方法是,传递另一个你需要自己定义的回调方法(如果你想用结果做某些事情)
例如:
function dbRequest(sql, cb) {
var dbResults = client.query(sql,function(err,results,fields) {
if (err) {
throw err;
}
if (typeof cb === 'function') {
cb(results);
}
client.end();
});
}
然后将其称为
dbRequest('select * from foo', function(data) {
// do something with data
});