Node.jsでsleep(時間制御)を実現する方法は、非同期処理を理解していることが重要です。
Node.jsはシングルスレッドで非同期イベント駆動型のプラットフォームですので、PHPやRubyなどの通常の「sleep」関数のような同期的な一時停止は避けるべきです。
代わりに、非同期コードを使用して適切な遅延を実現する方法があります。
以下に、Node.jsでスリープを実現する2つの一般的な方法を説明します。
setTimeoutによる非同期スリープ
これは非同期のコードを使用して遅延を実現するシンプルな方法です。setTimeout関数を使用して一定時間後にコードを実行するように設定します。
console.log("Start");
setTimeout(() => {
console.log("After 3 seconds");
}, 3000); // 3000ミリ秒(3秒)後にコードを実行
console.log("End");
ES6以降のNode.jsバージョンを使用している場合、Promiseとasync/awaitを組み合わせて非同期の遅延を実現することができます。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
(async () => {
console.log("Start");
await sleep(3000); // 3000ミリ秒 (3秒間) の遅延
console.log("After 3 seconds");
console.log("End");
})();
上記の例では、sleep
関数は指定したミリ秒数だけ非同期に待機するPromiseを返します。
実行方法はawait sleep(3000)
を使用して3秒間待機し、その後のコードを実行します。
Node.js v16以降から実装された timers/promises
モジュールを使用することでも実装が可能です。
const { setTimeout } = require('timers/promises');
(async () => {
console.log("Start");
await setTimeout(3000); // 3秒間の遅延
console.log("After 3 seconds");
console.log("End");
})();
この方法を使用することで、非同期処理をよりシンプルで読みやすい形で実現できます。また、他のPromiseベースの処理と組み合わせてコードを効果的に管理することができます。
どの方法も、Node.jsの非同期性に合わせた遅延処理の実現方法です。
同期的なスリープ
Node.jsは非同期イベント駆動型のプラットフォームであり、通常は同期的なスリープは推奨されません。
同期的なスリープを行うことは、プログラムのパフォーマンスを低下させる可能性があります。しかし、特定の状況で同期的なスリープが必要な場合があるかもしれません。
以下に、同期的なスリープを実現する例を示します。
function sleepSync(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
console.log("Start");
sleepSync(3000); // 3秒間同期的にスリープ
console.log("After 3 seconds");
console.log("End");
このコードは、指定したミリ秒数の間、空のループを実行することでスリープを模倣しています。この方法は他の処理をブロックするため、プロセス全体の処理を停止させます。