我刚刚开始学习 Node.js,我需要帮助:在 Node 上运行的以下代码中,为什么它被困在循环中,而它应该是一个异步方法?并且也不等待间隔。
class FuelBurner{
constructor(){
console.log("construction set");
this.fuel=0;
this.rate=2.0;
this.polluted=0.0;
}
run(){
while (true){
console.log("i run");
setTimeout( function (){this.polluted+=this.rate},1000);
this.fuel--;
}
}
get_pollution(){
return this.polluted;
}
}
console.log("Hello");
machine = new FuelBurner();
machine.run();
console.log("Why it never gets here?");
JavaScript 中的异步操作被放入队列中,只有当主事件循环不忙于其他事情时,代码才会再次处理它们。
您进入 while 循环并将函数传递给setTimeout
.
然后循环的其余部分运行,循环再次开始。
大约一秒钟后,第一次超时结束,该函数被放入队列中,以便在主事件循环空闲时运行。
主事件循环仍在运行while
循环,并且将永远执行,因为条件始终满足。它永远不会变得免费。它永远不会将函数从队列中拉出来运行它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)