2016-04-08 25 views
0

我的Node.js代碼中有一個簡單的忙碌循環,需要幾秒鐘才能完成。在此期間,我需要執行一些I/O操作,這些操作當前已排隊,並且在循環之後執行,而不是與循環「並行」。我知道Node並不執行並行執行,所以我正在尋找一些方法來中斷這個循環來讓Node做其他的事情。Node.js中的中斷忙循環

我試過用異步執行循環,但是導致超出調用棧(容易上升到2,000,000)。

while(i < length){ 
    if(something) sendWebSocketMessage(); 
    //Do stuff with i 
    i++; 
} 

任何想法?

回答

1

一個解決辦法是寫你的循環是這樣的:其他

(function step(){ 
    doSomething(); 
    if (length--) setImmediate(step); 
})(); 

這樣的事件在未來會之間進行處理。如果由於迭代次數較多而導致循環很長(vs由於步長較長),則可以使用部分循環代替doSomething()

如果你想你的循環減慢,爲了讓更多的時間來等任務,你也可以使用setTimeout與非空超時:

(function step(){ 
    doSomething(); 
    if (length--) setTimeout(step, 5); 
})();