#はじめに
Node.jsでループ処理の勉強メモその2です。(その1はこちら:Node.jsでsetIntervalを使ったタイマー)
今回はsetTimeoutを使ったパターンです。
#setTimeoutを使ったループ処理
setTimeoutは、Node.jsのタイマーを参照すると、以下のようにsetTimeoutは指定したミリ秒後にコードを実行する
とあります。
"When I say so" Execution ~ setTimeout()
setTimeout() can be used to schedule code execution after a designated amount of milliseconds.
setTimeoutをループ処理に使うためにはsetTimeout関数をカウンターのような仕組みの処理の中に入れてあげれば良いようです(下記counterの処理)。停止処理のためには、setIntervalを使用した場合はclearIntervalを使いましたが、setTimeoutの場合はclearTimeoutを使います。
処理の内容自体は前回記事と同じく、指定時間になるまで1秒おきに時刻を表示し、指定時間になると停止する仕様です。勉強目的なので、あまり込み入った処理は入れてません。
'use strict';
require('date-utils');
var count = 0;
const counter = () => {
var dt = new Date();
var formatted = dt.toFormat("HH24:MI:SS");
console.log(count++, "しばらくお待ち下さい、只今の時刻:",formatted);
const timeoutId = setTimeout(counter, 1000);
if(formatted === "16:20:00"){ //タイマーを止める時刻を指定する(未来の時刻を手動で指定する)
clearTimeout(timeoutId);
console.log('時間になりました!')
}
}
counter();
#実行結果
実行前に前回同様前提としてnpm install date-utils
を実行しておきます。
以下実行結果です。
$ node timer2.js
0 しばらくお待ち下さい、只今の時刻: 16:19:50
1 しばらくお待ち下さい、只今の時刻: 16:19:51
2 しばらくお待ち下さい、只今の時刻: 16:19:52
:
10 しばらくお待ち下さい、只今の時刻: 16:20:00
時間になりました!
#おまけ
setTimeout、setIntervalを使った簡単なタイマーを作ってみましたが、両者は正確には下記のような挙動の違いがあるようです(下記サイト参照)。勉強になります。
setTimeoutで繰り返し処理をおこなった場合:処理終了時点から一定時間後に同じ処理を繰り返す
setIntervalで繰り返し処理をおこなった場合:処理開始時点から一定時間後に同じ処理を繰り返す