function work(){
//do some of the heavy computation now
process.nextTick(work);
}
work();
console.log("started");
setTimeout(function(){ console.log("hi there");}, 1000);
当我运行他的代码时,我得到:启动,但我从来没有得到过那里的消息。 我做错了什么,或者这是节点的问题?
编辑: 当我用setTimeout替换process.nextTick时,它可以工作,但是nextTick应该更快,或者当我用process.nextTick()替换setTimeout时,你好,但是它不会等待1000ms。
答案 0 :(得分:1)
使用setImmediate是可行的方法
function work(){
setImmediate(work);
}
work();
console.log("started");
setTimeout(function(){ console.log("hi there");}, 1000);
答案 1 :(得分:0)
Node.js使用一个事件循环,(简单来说)它将运行任何代码,直到它返回,然后运行其队列中的下一个东西。 process.nextTick()
将您传递给它的函数设置为该队列中的下一个函数。 setTimeout(foo, x)
会告诉它在x
毫秒内添加传递给队列的函数。
您的代码正在添加work
作为队列中的下一个内容然后完成,然后节点运行work
函数,然后执行某项操作然后添加work
作为下一个事项。队列,这将永远持续下去。在某些时候,计时器结束并将您的日志添加到队列中,但由于nextTick
总是添加work
作为队列中的第一件事,因此它实际上从未实际获取它。