节点 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
添加为队列中的第一件事,它实际上从未将其拾取。
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
添加为队列中的第一件事,它实际上从未将其拾取。