2014-09-19 59 views
0

我嘗試使用sonos(https://www.npmjs.org/package/sonos)返回我在我的網絡上擁有的播放器陣列。我想在啓動時使用sonos.search函數爲我找到播放器,然後在連接到網絡時使用新播放器更新陣列。在啓動時運行阻塞函數Nodejs

由於sonos.search是異步的,其餘代碼將在所有播放器在啓動時添加到陣列之前執行。我如何阻止代碼在啓動時運行sonos.search一次,持續10秒,建立一個網絡上的播放器陣列,然後監聽/搜索新播放器,並在連接時添加到陣列中?

-

回答

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框架使用這個庫來處理同步功能的一個小例子。

2

試圖違背nodejs的異步行爲通常不是解決問題的最佳方法。

如果您希望在sonos加載播放器後執行其餘代碼,應該在異步函數的回調中調用它。

如果您真的想在啓動其餘代碼之前等待10秒鐘,可以使用setTimeout()函數。

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