在启动Nodejs时运行阻塞功能

时间:2014-09-19 13:42:08

标签: node.js blocking

我尝试使用sonos(https://www.npmjs.org/package/sonos)来返回我在网络上的一系列玩家。我想使用sonos.search函数在启动时为我找到玩家,然后在连接到网络的情况下用新玩家更新阵列。

由于sonos.search是异步的,因此在启动时将所有播放器添加到阵列之前,其余代码将执行。如何在启动时阻止代码运行sonos.search 10秒钟,在网络上构建一组播放器然后监听/搜索新播放器并在连接时添加到阵列?

-

2 个答案:

答案 0 :(得分:2)

尝试反对nodejs的异步行为通常不是解决问题的最佳方法。

如果您希望在sonos加载播放器之后执行其余代码,则应该从异步函数的回调中调用它。

如果您确实要在启动其余代码之前等待10秒,则可以使用setTimeout()函数。

setTimeout(function() {
    codeToBeExecutedAfter10Secs();
}, 10000);

答案 1 :(得分:0)

您可以尝试:

https://github.com/luciotato/waitfor

进行同步通话。它适用于光纤,有许多方法可以“等待”某些东西。

编辑:使用它的一个小例子,假设你使用mongoskin来访问数据

var wait =require('wait.for');

wait.launchFiber(function(){
    var obj = getAsyncData();
});

function getAsyncData(){
   return wait.forMethod(db.collection('data'), 'find');
}

我认为MeteorJS框架使用这个库来处理同步功能。