节点设置超时不工作

Node setTimeout notWorking

本文关键字:工作 超时 设置 节点      更新时间:2023-09-26
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。

使用setInstant是要走的路

function work(){
    setImmediate(work);
}
work();

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

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

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