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