Node.JS和同步数据库查询

在node.js应用程序中,我需要做这样的事情:(当然伪代码)

if(loadedData is empty){ loadDatafromDatabase <<---- this one is async } useLoadedData 

当然,从数据库加载数据是一个asynchronous过程,所以useLoadedData在加载完成之前尝试使用数据。 有什么干净的方法来等待loadDataFromDatabase返回它的结果吗?

我已经看到许多人提到callback是一个正确的解决scheme,所以我很想做这样的事情:

 if(loadedData is empty){ loadDataFromDatabase( callback useLoadedData ) }else{ useLoadedData } 

但对我来说看起来很肮脏。 有没有更好的方法

谢谢!

如果您可以使用节点光纤,则可以尝试使用wait.for

https://github.com/luciotato/waitfor

 var wait=require('wait.for'); function process(){ if(!data){ data = wait.for(loadDatafromDatabase); // loadDatafromDatabase is *standard* async // wait.for will pause the fiber until callback } useLoadedData(data); } wait.launchFiber(process); 

这样做的节点方式是这样的:

 db.query(queryString, callbackproc); function callbackproc(resultSet) { // do both cases here }