0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node.jsでsetTimeoutを使ったタイマー

Last updated at Posted at 2021-07-08

#はじめに

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秒おきに時刻を表示し、指定時間になると停止する仕様です。勉強目的なので、あまり込み入った処理は入れてません。

timer2.js
'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で繰り返し処理をおこなった場合:処理開始時点から一定時間後に同じ処理を繰り返す

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?