Help us understand the problem. What is going on with this article?

JavaScriptでループ中にスリープする。

More than 3 years have passed since last update.

この記事は、
JavaScriptでループ中にスリープしたい。それも読みやすいコードで
を見て、改良してみたものです。

ループ中の i が 0 から、ループ数、だと、
Forのように、start から end までを定義できたほうがいいなと思ったので
次のようなものを作りました。

function intervalForTo(startIndex,endIndex, interval, func) {
    if (!(startIndex <= endIndex)) { return; }
    var i = startIndex;
    var loopFunc = function () {
        if ( func(i) === false) {
            //戻り値がfalseならループをbreakする
            return;
        }
        if (i < endIndex) {
            setTimeout(loopFunc, interval);
        }
        i++;
    }
    loopFunc();
}

function intervalForDownTo(startIndex,endIndex, interval, func) {
    if (!(endIndex <= startIndex)) { return; }
    var i = startIndex;
    var loopFunc = function () {
        if ( func(i) === false) {
            //戻り値がfalseならループをbreakする
            return;
        }
        if (endIndex < i) {
            setTimeout(loopFunc, interval);
        }
        i--;
    }
    loopFunc();
}

使い方は、次のようにします。

    intervalForTo(5, 10, 500, function(index) {
        alert(index.toString());
    });
    //5,6,7,8,9,10 と表示されます。

    intervalForDownTo(10, 5, 500, function(index) {
        alert(index.toString());
    });
    //10,9,8,7,6,5 と表示されます。

intervalForTo / intervalForDownTo で囲まれている部分にたいして
return true; で、continue
return false;で、break の機能があります。

setTimeout で実装していますが

元記事のコメント欄にあった、
setInterval を使った実装もしてみましたので、

より詳しい内容は、GitHubの方をどうぞ

standard-software/stsLib.js/stslib_web.js

standard-software
JS便利関数ライブラリ Parts.js 作ってます。npmで公開しています。
https://www.npmjs.com/package/@standard-software/parts
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away