Node.jsにタイマーはありますか?

WBOY
WBOYオリジナル
2022-07-04 17:28:511911ブラウズ

「node.js」にはタイマーがあります。「node.js」のタイマーモジュールには、一定期間に一度コードを実行する関数が含まれています。タイマーを導入する必要はありません。 require() は、すべてのメソッドがブラウザーの JavaScript 関数をシミュレートし、グローバルであるためです。「node.js」のタイマー関数は、Web ブラウザーによって提供されるタイマー API と同様の API を実装します。

Node.jsにタイマーはありますか?

この記事の動作環境: Windows 10 システム、nodejs バージョン 12.19.0、Dell G3 コンピューター。

node.js にはタイマーがあります

Node.js のタイマー

Node.js のタイマー モジュールには、一定の間隔でコードを実行する関数が含まれています。これらのメソッドはすべてブラウザーで JavaScript 関数をシミュレートし、グローバルであるため、require() を通じてタイマーを導入する必要はありません。これらの関数がいつ実行されるかを全体的に理解するには、Node.js のイベント ポーリングを読むことをお勧めします。

Node.js による時間の連続性の制御

Node.js の API 関数には、現在時刻以降の特定の時点でコードの実行を開始できるようにするいくつかの方法が用意されています。以下に示す関数は、ほとんどのブラウザで使用できるため、同様に見えます。しかし、実際には Node.js は独自の実装を提供します。タイマーはシステムに非常に緊密に統合されており、これらの API はブラウザーの関数のコピーですが、実装方法は異なります。

タイマーは、将来の特定の時点で呼び出される関数をスケジュールするために使用されます。Node.js のタイマー関数は、Web ブラウザーによって提供されるタイマー API に似た API を実装しますが、イベント ループを使用します。 Node.js には 4 つの関連メソッドがあります

setTimeout(callback, delay[, ...args])
setInterval(callback[, ...args])
setImmediate(callback[, ...args])
process.nextTick(callback[, ...args])

例は次のとおりです:

setTimeout() は、実行後に特定の関数を実行するために使用できます。指定された期間のコーディングタスク。この関数はブラウザの JavaScript 関数 window.setTimeout() に非常に似ていますが、実行時に文字列を渡すことはできません。

setTimeout() は、最初のパラメータとして実行可能関数を受け取り、2 番目のパラメータとしてミリ秒単位の遅延時間を持ちます。残りのパラメータも、この関数に渡されるパラメータとして含めることができます。以下は例です。

function myFunc(arg) {
  console.log(`arg was => ${arg}`);
}
setTimeout(myFunc, 1500, 'funky');

setTimeout() が使用されているため、上記の関数 myFunc() は約 1500 ミリ秒 (または 1.5 秒) で実行されます。

設定されたタイミング間隔では、コードが毎回正確なミリ秒間隔で実行されることは保証できません。これは、他のコードがブロックされているか、イベント ポーリングで処理されているため、このタイミングの実行が遅れるためです。唯一の保証は、宣言された間隔より早くタイマーが実行されないことです。

setTimeout() は、設定されたタイマーを参照できる Timeout オブジェクトを返します。返されたオブジェクトは、タイミングをキャンセルしたり (下記の clearTimeout() を参照)、実行動作を変更したり (以下の unref() を参照) するために使用できます。

「直後に実行」 setImmediate()

setImmediate() は、現在のイベント ポーリングの終了時に実行されます。このコードは、現在のイベント ポーリングでの I/O 操作の後、および次のタイマー サイクルの前に実行されます。コードの実行は「直後に実行される」と考えることができます。これは、直後の setImmediate() 関数呼び出しが setImmediate() 関数のパラメーターの前に実行されることを意味します。

setImmediate() の最初のパラメータは実行される関数であり、実行されると、後続のパラメータがパラメータとしてこの関数に渡されます。以下に例を示します。

console.log('before immediate');
setImmediate((arg) => {
  console.log(`executing immediate: ${arg}`);
}, 'so immediate');
console.log('after immediate');

setImmediate() に渡された上記の関数は、実行可能コードが実行された後に実行されるため、出力は次のようになります。

before immediate
after immediate
executing immediate: so immediate

setImmediate() はイミディエイト オブジェクトを返します。 、スケジュールされたスケジュールされたタスクをキャンセルするために使用できます (下記の clearImmediate() を参照)。

注: setImmediate() と process.nextTick() を混同しないでください。これらにはいくつかの大きな違いがあります。まず、 process.nextTick() は、イミディエイト セットの前、およびスケジュールされた I/O の前に実行されます。次に、process.nextTick() は消去できません。つまり、process.nextTick() を使用してコードが実行されると、実行を中断することはできません。これは通常の関数と同じです。詳細については、このチュートリアルを参照してください。 process.nextTick() の動作を理解します。

「永久ポーリング」の実行 ~ setInterval()

複数回実行する必要がある関数がある場合は、setInterval() が便利です。 setInterval() は、無限回実行される関数をパラメータとして受け取ります。2 番目のパラメータは、ミリ秒単位の指定された遅延です。 setTimeout() と同様に、残りのパラメータをこの後に追加し、関数呼び出しに渡される引数として使用できます。 setTimeout() と同様のもう 1 つの点は、一部の操作がイベント ポーリングでハングする可能性があるため、遅延が正確であることが保証されていないため、おおよその遅延とみなすことができることです。次の例のように:

function intervalFunc() {
  console.log('Cant stop me now!');
}
setInterval(intervalFunc, 1500);

上の例では、intervalFunc() は終了するまで 1500 ミリ秒ごと (または 1.5 秒ごと) に実行されます。

setTimeout() と同様に、setInterval() も Timeout オブジェクトを返します。これを参照して、設定されたタイマーを変更できます。

推奨される学習: 「nodejs ビデオ チュートリアル

以上がNode.jsにタイマーはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。