node.jsのタイマーイベントは、正確な時刻に呼び出されることが保証されていません。
私は今から10秒、と言うのためのsetTimeout()を呼び出した場合、それらの コマンドはsetTimeoutメソッドで設定した機能の実行を終了するまで、その後、長時間実行されるコマンドの セットを実行、Node.jsの/ JavaScriptが待っていますか?
はい、次のタイマーイベントを処理する前に、node.jsで実行されている現在のコードが完了するまで待機します。
setInterval()も同じですか?
はい、setInterval()
と同じメカニズムです。
ここで、node.jsシステムの仕組みについて説明します。
node.jsはシングルスレッドのイベント駆動型システムです(技術的にはスレッドはnode.js内で使用されますが、JSコードの1つのスレッドのみを実行します)。
setTimeout()
またはsetInterval()
を使用すると、node.jsの内部メカニズムによって、システムタイマーが次のタイマーの起動タイミングを知るために使用されます。その時点で、イベントがnode.jsイベントキューに挿入されます。その時点でnode.jsが何もしていない場合、イベントはすぐにトリガーされ、適切なコールバック関数がただちに呼び出されます。
node.jsが実行中のコードで、他のイベントがイベントキューのタイマーイベントの前にある場合、タイマーイベントはすぐにはトリガーされません。
代わりに、node.jsは、node.js内の現在の実行スレッドが完了するまで待ってから、イベントキュー内の次のイベントが取り出され、そのイベントの適切なコールバックが取得されますと呼ばれる。
長時間実行しているnode.jsコードがあると、それは完了するまで他のすべてのイベント(タイマーイベントを含む)をブロックし、node.jsはイベントから次のイベントを引き出すことに戻りますキュー。
JavaScriptコードが単一のスレッドで実行されるという事実を強調したいだけです。あなたの懸念は本当に曖昧なので、私は本当に何か他のことを言いません。 – tcooc
@tcoocがシングルスレッド化されていても、「Node.js/JavaScriptはコマンドの実行が完了するまで待つ」という答えは意味がありません – zerkms
@Alejandro、ありがとうございましたが、その質問のsetInterval() 。 – user994165