无法解释nodejs的行为。我有代码:
while (true) {
setTimeout(() => console.log(1), 0)
}
这个剧本只是悬挂......
为什么?我一直认为setTimeout
是非阻塞和异步的,而nodejs使用timers
事件循环阶段来调度setTimeout
回调......但似乎事件循环被阻止了..
答案 0 :(得分:3)
你的while循环是无限的。它将继续设置超时并且永远不会退出循环。由于JavaScript是单线程的,因此超时的代码在当前代码完成之前不会运行,并且由于while循环永远不会完成,因此超时不会运行。
如果你想使用超时对数字1的控制台进行垃圾邮件,这看起来就像你想要做的那样,你必须在当前超时的回调中设置下一个超时:
function timeoutFunc() {
console.log(1);
setTimeout(timeoutFunc, 0);
}
timeoutFunc();