节点setTimeout notWorking

时间:2015-11-07 14:49:52

标签: javascript node.js settimeout

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。

2 个答案:

答案 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作为队列中的第一件事,因此它实际上从未实际获取它。