非同期ループ処理 (5) - 進捗表示2

非同期ループ処理 (4) と似ているが、配列から shift して要素を取り出すのではなく、配列全体を保持しつつ位置 _index を加算しながら要素を取り出している。この方法でもプログレスバーなどで進捗状況を表示できる。

var asyncProgressiveProcessor2 = {

    _index : -1,
    _array : [],

    start : function(aArray)
    {
        // 開始処理
        dump("start
");
        // 初期化
        this._array = aArray;
        this._index = -1;
        this._next();
    },

    _next : function()
    {
        if ( ++this._index < this._array.length ) {
            setTimeout(function(){ asyncProgressiveProcessor2._process(); }, 500);
        } else {
            setTimeout(function(){ asyncProgressiveProcessor2._finish(); }, 500);
        }
    },

    _process : function()
    {
        var elt = this._array[this._index];
        // 処理
        dump("processing (" + (this._index+1) + "/" + this._array.length + ")... " + elt + "
");
        // 次の処理へ
        this._next();
    },

    _finish : function()
    {
        // 終了処理
        dump("finish
");
    },

};

asyncProgressiveProcessor2.start(['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']);

TOP

TOP