Node.jsが非同期で動作している間、次のように記述します。
function sleep() {
var stop = new Date().getTime();
while(new Date().getTime < stop + 15000) {
;
}
}
sleep();
console.log("done");
... sleep()を呼び出し、whileループ(15秒)の間サーバーをブロックしてから、コンソールに「done」と出力します。私が理解している限り、これはNode.jsがJavaScriptにメインスレッドへのアクセスのみを許可しているためです。したがって、このようなことはそれ以上の実行を停止します。
だから私はこれに対する解決策がコールバックを使用することであることを理解しています:
function sleep(callback) {
var stop = new Date().getTime();
while(new Date().getTime() < stop + 15000) {
;
}
callback();
}
sleep(function() {
console.log("done sleeping");
});
console.log("DONE");
だから私はこれが「DONE」と15秒後に印刷されると思いました。sleep()関数が呼び出され、コールバック関数へのポインターが渡されるため、「donesleeping」。この関数が機能している間(whileループ)、最後の行が実行されます(print'done')。15秒後、sleep()関数が終了すると、指定されたコールバック関数が呼び出され、「donesleeping」と出力されます。
どうやら私はここで何か間違っていることを理解しました、なぜなら上記の両方の方法がブロックするからです。誰か明確にしていただけますか?
よろしくお願いします、Slagjoeyoco