我的Node.js代码中有一个简单的繁忙循环,结果需要几秒钟才能完成。在此期间,我需要执行一些I / O操作,这些操作当前已排队并且在循环之后执行,而不是" parallel"循环。我知道Node并不执行并行执行,因此我正在寻找一些方法来中断循环以允许Node执行其他操作。
我尝试使用异步实现循环,但这导致超出调用堆栈( i 很容易达到2,000,000)。
while(i < length){
if(something) sendWebSocketMessage();
//Do stuff with i
i++;
}
有什么想法吗?
答案 0 :(得分:1)
解决方案可能是像这样编写循环:
(function step(){
doSomething();
if (length--) setImmediate(step);
})();
这样就可以处理其间发生的其他事件。如果由于大量迭代而导致循环很长(与长步骤相比),则可以使用部分循环代替doSomething()
。
如果你想减慢你的循环,为了让更多的时间用于其他任务,你也可以使用setTimeout
非空超时:
(function step(){
doSomething();
if (length--) setTimeout(step, 5);
})();