0

setInterval() を介して、10ms ごとに配列内の値を反復処理しようとしています。

ただし、コンピューターは反復をそれほど高速に処理できないため、実際には、配列が完全に反復される前に、私の clearInterval() が間隔をクリアしています。

以下は、私が行っていることの単なる例であり、より CPU を集中的に使用する実際のコードではありません。

CPU のパフォーマンスに関係なく、最後まで反復するようにコードを修正するにはどうすればよいですか?

var blah = ['a','b','c'];
i=0;

int = setInterval(function(){   
    console.log(blah[i]);
    i++;
},10);

timeout = setTimeout(function(){
    clearInterval(int);
}, blah.length * 10);
4

4 に答える 4

1

私は何かに沿って行きます

var inter, 
    blah = ['a','b','c','d','e'],
    i=0;
inter = setInterval(function(){   
    console.log(blah[i]);
    i++;
    if (i === blah.length) {
        clearInterval(inter);
    }
},1);

PS: 1 ミリ秒を入れたので、10 ミリ秒で問題なく動作しました。

于 2013-04-30T12:43:48.573 に答える
0

私は個人的にsetIntervalあなたがやろうとしていることには使いたくありません。目的がプロセスを調整することである場合、つまり、特定の時間に処理される反復が 1 つだけであり、次のプロセス反復の前に遅延を追加する場合、「setInterval」はそれを強制できません。各プロセスの反復が一定の間隔で開始されることのみを保証できます。

これは私がそれを行う方法です:

<script>

var items = [1, 2, 3, 4, 5];

function processOffersOneAtATime() {
    if (items.length != 0) {
        var item = items.pop();
        setTimeout(function() {
         console.log(item);
         //do time consuming cpu intensive operation here
         processOffersOneAtATime();
        }, 1000);
    }
}
//kick start the process
 processOffersOneAtATime();
 </script>
于 2013-04-30T13:39:47.727 に答える
0

私は次のようにそれを解決します:

var blah = ['a','b','c'];

function iterate(index) {
    console.log(blah[index]);
    if(index < blah.length - 1) {
        setTimeout(function() {iterate(++index)}, 10);
    }
}

iterate(0);

そうすれば、タイムアウトのクリアに対処する必要がなくなり、クロージャー キャプチャの問題を伴うグローバル インデックス変数もなくなります。

于 2013-04-30T12:54:27.157 に答える