情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsで任意時間後に非同期的な処理を実行する

2016/07/18

setTimeout関数

任意時間後に非同期的な処理を実行するにはsetTimeout関数を使用します。

var to = setTimeout(function () {
}, 100);

第1引数に非同期的な処理を関数として指定します。

第2引数に非同期的な処理の実行待機時間をミリ秒単位で指定します。ただし、2147483648以上の値や0以下の値を指定した場合には1となります。

返り値として任意時間後に実行される非同期的な処理を表すtimeoutObjectクラスのインスタンスが得られます。

なお、この関数は任意時間後丁度に必ず処理を実行するものではないことに注意してください。任意時間後丁度に別の処理が実行されている場合にはその処理の完了を待機することになりますし、その処理が完了しても別の待機中の処理がある場合にはその処理の実行が優先される可能性もあります。

clearTimeout関数

任意時間後に実行される非同期的な処理の実行を中止するにはclearTimeout関数を使用します。

clearTimeout(to);

第1引数にtimeoutObjectクラスのインスタンスを指定します。

サンプルコード1

set-timeout.js

var cleared = false;
var to = setTimeout(function () {
    console.log('YeY');
}, 100);

process.stdin.on('data', function (data) {
    if (!cleared) {
        clearTimeout(to);
        cleared = true;
        console.log('deleted.');
    }
    else {
        console.log('exited.');
        process.exit(0);
    }
});

実行結果

C:\work\node>node set-timeout.js
YeY

deleted.

exited.

サンプルコード2

任意時間後丁度に別の処理が実行されている場合の例です。

set-timeout-for.js

var util = require('util');

var cleared = false;
var to = setTimeout(function () {
    util.log('YeY');
}, 100);
util.log('timeout is setted.');

for (var i = 0; i < 10000000000; i++) {}

実行結果

C:\work\node>node set-timeout-for.js
21 Apr 11:03:34 - timeout is setted.
21 Apr 11:03:51 - YeY

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js