以下示例在Node.js书中给出:
var open = false;
setTimeout(function() {
open = true
}, 1000)
while (!open) {
console.log('wait');
}
console.log('open sesame');
Run Code Online (Sandbox Code Playgroud)
作者解释说明while循环阻止执行的原因:
Node永远不会执行超时回调,因为事件循环停留在第7行的while循环中,永远不会让它有机会处理超时事件!
但是,作者没有解释为什么会在事件循环的上下文中发生这种情况或者真正发生在幕后的事情.
有人可以详细说明吗?节点为什么会卡住?如何更改上面的代码,同时保留while控制结构,以便不阻止事件循环,并且代码将按照人们可能合理预期的方式运行; 等待将在setTimeout火灾前记录仅1秒,然后在记录"打开芝麻"后退出该过程.
关于IO和事件循环和回调这个问题的答案等通用解释并没有真正帮助我理解这一点.我希望直接引用上述代码的答案会有所帮助.