【发布时间】:2016-04-21 20:05:54
【问题描述】:
Node.js 书中给出了以下示例:
var open = false;
setTimeout(function() {
open = true
}, 1000)
while (!open) {
console.log('wait');
}
console.log('open sesame');
解释为什么while循环会阻塞执行,作者说:
节点永远不会执行超时回调,因为事件循环是 停留在这个 while 循环从第 7 行开始,从来没有给它机会 处理超时事件!
但是,作者没有解释为什么会在事件循环的上下文中发生这种情况,也没有解释到底发生了什么。
有人可以详细说明吗?为什么节点会卡住?以及如何更改上述代码,同时保留while 控制结构,以便不阻塞事件循环并且代码将按照人们可能合理预期的方式运行;等待
在setTimeout 触发之前将仅记录 1 秒,然后在记录“芝麻开门”后进程退出。
诸如关于 IO 和事件循环和回调的答案 to this question 等一般解释并不能真正帮助我合理化这一点。我希望直接引用上述代码的答案会有所帮助。
【问题讨论】:
-
我不同意这是重复的。它引用了一段特定的代码和这段代码的具体解释。它还询问如何重写代码。
-
没问题 :-) 只是说它是一个可能重复,而不是重复。
标签: javascript node.js