Javascript 中断Node.js中的忙循环

Javascript 中断Node.js中的忙循环,javascript,node.js,asynchronous,synchronous,Javascript,Node.js,Asynchronous,Synchronous,我在Node.js代码中有一个简单的忙循环,结果需要几秒钟才能完成。在这段时间内,我需要执行一些I/O操作,这些操作当前处于队列中,所有操作都在循环之后执行,而不是与循环“并行”。我知道节点不执行并行执行,所以我正在寻找某种方法来中断循环,以允许节点执行其他操作 我尝试过用异步实现循环,但结果超出了调用堆栈(我很容易达到2000000) while(i

我在Node.js代码中有一个简单的忙循环,结果需要几秒钟才能完成。在这段时间内,我需要执行一些I/O操作,这些操作当前处于队列中,所有操作都在循环之后执行,而不是与循环“并行”。我知道节点不执行并行执行,所以我正在寻找某种方法来中断循环,以允许节点执行其他操作

我尝试过用异步实现循环,但结果超出了调用堆栈(我很容易达到2000000)

while(i

有什么想法吗?

一个解决方案可以是这样编写循环:

(function step(){
     doSomething();
     if (length--) setImmediate(step);
})();
这样就可以处理介于两者之间的其他事件。如果您的循环由于大量迭代而变长(与由于长步骤而变长),则可以使用部分循环来代替
doSomething()

如果要减慢循环速度,以便有更多的时间执行其他任务,还可以使用非空超时的
setTimeout

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