节点setTimeout notWorking

function work(){ //do some of the heavy computation now process.nextTick(work); } work(); console.log("started"); setTimeout(function(){ console.log("hi there");}, 1000); 

当我运行他的代码,我得到:开始,但我从来没有得到消息嗨。 我做错了什么,或者这是节点的问题?

编辑:当我用setTimeoutreplaceprocess.nextTick它的工作原理,但nextTick应该是更快,或者当我用set.out.nextTick()你好显示,但它不会等待1000毫秒。

使用setImmediate是要走的路

 function work(){ setImmediate(work); } work(); console.log("started"); setTimeout(function(){ console.log("hi there");}, 1000); 

Node.js使用一个事件循环(简单来说),它会运行任何代码,直到它返回,然后运行队列中的下一个事物。 process.nextTick()设置你把它传递给该队列中的下一个东西的函数。 setTimeout(foo, x)会告诉它在x毫秒中将传递给队列的函数添加到队列中。

你的代码将work添加到队列中的下一个work中,然后完成,所以然后节点运行work函数,这会执行一些work ,然后将work作为队列中的下一个work来进行,这将一直持续下去。 在某个时刻,计时器结束,它将你的日志添加到队列中,但是由于nextTick总是将work作为队列中的第一件事物来添加,所以它从来没有真正地将其join。