我想触发setTimeout回调函数,但似乎无效。有什么问题?
var fs = require("fs");
// set timeout callback
setTimeout(function(){
console.log("5000ms timeout");
process.exit(0);
}, 5000 );
// do something more than 5000ms
while(true) {
var stats = fs.statSync("foo");
console.log("while statement running...");
}
当我运行它时,在5秒后,程序仍在运行
答案 0 :(得分:2)
while(true)
是一个紧密的自旋循环,可防止任何其他异步回调被触发。不要在单线程环境中执行此操作。您可以使用setInterval
使用较小的超时而不是while(true)
。
答案 1 :(得分:1)
Javascript严格是单线程的。 (工人除外)
只要您的while
循环正在运行,就无法执行任何其他Javascript代码,包括您的setTimeout
回调。
相比之下,调用setInterval
只是安排一个回调定期运行,但不会在过渡期间阻塞该线程。
答案 2 :(得分:0)
我不熟悉node.js,但我通常希望while循环继续运行。 JS正在阻止。为了停止该循环,它的条件需要评估为false。在循环停止之前,不会执行任何其他操作。