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

対照的に、calling はsetInterval単純にコールバックを定期的に実行するようにスケジュールしますが、その間にスレッドをブロックしません。

于 2012-06-06T03:11:44.813 に答える
0

私はnode.jsに精通していませんが、通常はwhileループが実行され続けることを期待しています。JSがブロックしています。そのループを停止するには、条件がfalseと評価される必要があります。ループが停止するまで、他には何も実行されません。

于 2012-06-06T02:45:25.507 に答える