中断Node.js中的繁忙循环

时间:2016-04-08 12:23:03

标签: javascript node.js asynchronous synchronous

我的Node.js代码中有一个简单的繁忙循环,结果需要几秒钟才能完成。在此期间,我需要执行一些I / O操作,这些操作当前已排队并且在循环之后执行,而不是" parallel"循环。我知道Node并不执行并行执行,因此我正在寻找一些方法来中断循环以允许Node执行其他操作。

我尝试使用异步实现循环,但这导致超出调用堆栈( i 很容易达到2,000,000)。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

解决方案可能是像这样编写循环:

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

这样就可以处理其间发生的其他事件。如果由于大量迭代而导致循环很长(与长步骤相比),则可以使用部分循环代替doSomething()

如果你想减慢你的循环,为了让更多的时间用于其他任务,你也可以使用setTimeout非空超时:

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