节点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。