如何在Node.js中触发超时功能?

时间:2012-06-06 02:40:04

标签: node.js settimeout

我想触发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秒后,程序仍在运行

3 个答案:

答案 0 :(得分:2)

while(true)是一个紧密的自旋循环,可防止任何其他异步回调被触发。不要在单线程环境中执行此操作。您可以使用setInterval使用较小的超时而不是while(true)

答案 1 :(得分:1)

Javascript严格是单线程的。 (工人除外)

只要您的while循环正在运行,就无法执行任何其他Javascript代码,包括您的setTimeout回调。

相比之下,调用setInterval只是安排一个回调定期运行,但不会在过渡期间阻塞该线程。

答案 2 :(得分:0)

我不熟悉node.js,但我通常希望while循环继续运行。 JS正在阻止。为了停止该循环,它的条件需要评估为false。在循环停止之前,不会执行任何其他操作。