从callback结果中填充一个var?

开始玩节点,还是比较新的。 我有下面的代码,是否有可能从我想要在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); } 

不,至less不是你试过的方式。

最有可能的是,调用client.query()将启动对节点的asynchronous请求。 这又意味着,代码执行将立即继续,因此,将在callback填充之前返回x的值。

处理这种事情的一个相当方便的方法是,传入另一个callback方法,你需要定义自己(如果你想用结果做某些事情)

例如:

 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 });