Node.JS和同步数据库查询

时间:2014-08-25 18:38:48

标签: javascript node.js

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

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

当然,从数据库加载数据是一个异步过程,因此useLoadedData会在加载完成之前尝试使用数据。 在继续之前是否有任何干净的方法等待loadDataFromDatabase返回其结果?

我见过很多人提到回调是一个正确的解决方案,所以我很想做类似的事情:

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您对包含节点光纤没有问题,可以尝试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);

答案 1 :(得分:0)

执行此操作的节点方式如下:

db.query(queryString, callbackproc);

function callbackproc(resultSet) {
  // do both cases here
}