在node.js应用程序中,我需要做这样的事情:(当然是伪代码)
if(loadedData is empty){
loadDatafromDatabase <<---- this one is async
}
useLoadedData
当然,从数据库加载数据是一个异步过程,因此useLoadedData会在加载完成之前尝试使用数据。 在继续之前是否有任何干净的方法等待loadDataFromDatabase返回其结果?
我见过很多人提到回调是一个正确的解决方案,所以我很想做类似的事情:
if(loadedData is empty){
loadDataFromDatabase( callback useLoadedData )
}else{
useLoadedData
}
但对我来说看起来很脏。有更好的方法吗?
谢谢!
答案 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
}