Node.js在永久循环中设置了setTimeout

时间:2017-09-14 21:43:16

标签: javascript node.js

无法解释nodejs的行为。我有代码:

while (true) {
  setTimeout(() => console.log(1), 0)
}

这个剧本只是悬挂......

为什么?我一直认为setTimeout是非阻塞和异步的,而nodejs使用timers事件循环阶段来调度setTimeout回调......但似乎事件循环被阻止了..

1 个答案:

答案 0 :(得分:3)

你的while循环是无限的。它将继续设置超时并且永远不会退出循环。由于JavaScript是单线程的,因此超时的代码在当前代码完成之前不会运行,并且由于while循环永远不会完成,因此超时不会运行。

如果你想使用超时对数字1的控制台进行垃圾邮件,这看起来就像你想要做的那样,你必须在当前超时的回调中设置下一个超时:

function timeoutFunc() {
  console.log(1);
  setTimeout(timeoutFunc, 0);
}

timeoutFunc();