节点 setTimeout 不工作

Node 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);

当我 运行 他的代码时,我得到 : 开始,但我从来没有收到消息 hi there。 我做错了什么,还是节点有问题?

编辑: 当我将 process.nextTick 替换为 setTimeout 时它可以工作,但 nextTick 应该更快,或者当我将 setTimeout 替换为 process.nextTick() hello 显示但它不会等待 1000 毫秒。

使用 setImmediate 是可行的方法

function work(){
    setImmediate(work);
}

work();


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

Node.js 与事件循环一起工作,(简单地说)它将 运行 任何代码,直到 returns 然后 运行 队列中的下一个代码。 process.nextTick() 将您传递给它的函数设置为该队列中的下一个函数。 setTimeout(foo, x) 将告诉它在 x 毫秒内将您传递的函数添加到队列中。

您的代码正在添加 work 作为队列中的下一个事物然后完成,因此节点 运行 是 work 函数,该函数执行某些操作然后添加 work 作为队列中的下一件事情,这将永远持续下去。在某个时候计时器结束并将您的日志添加到队列中,但是由于 nextTick 总是将 work 添加为队列中的第一件事,它实际上从未将其拾取。