2

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

4

3 回答 3

2

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

于 2012-06-06T02:45:16.017 回答
1

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

只要您的while循环正在运行,就没有其他 Javascript 代码可以执行,包括您的setTimeout回调。

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

于 2012-06-06T03:11:44.813 回答
0

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

于 2012-06-06T02:45:25.507 回答