Как бы вы сделали цикл для таймера? - PullRequest
2 голосов
/ 02 марта 2012

Какой лучший способ сделать что-то подобное?

for a in b
   #do this thing
   #wait a second, then continue the loop

в js

var a, _i, _len;

for (_i = 0, _len = b.length; _i < _len; _i++) {
  a = b[_i];
  //do this thing
  //wait a second, then continue the loop
}

Спасибо!

Ответы [ 3 ]

4 голосов
/ 02 марта 2012

Чтобы обрабатывать один элемент из цикла for (i in b) каждую секунду, пока вы не закончили с элементами, вы можете сделать это следующим образом:

var list = [];
// accumulate list of items to operate on into an array
// that can be incremented through
for (var i in b) {
    list.push(i);
}

function next() {
    if (list.length > 0) {
        var item = list.shift();
        // do something with the next item here

        // do the next iteration one second later
        setTimeout(next, 1000);
    }
}
// start it
next();
3 голосов
/ 02 марта 2012

Я думаю, что это будет работать с JavaScript:

var b = [1, 2, 3];
var timer;
var i = 0;
function timerFunction() {
    // base case
    if (i >= b.length) {
        clearInterval(timer);
        return;
    }

    var element = b[i];

    // do stuff to b here

    i++;
}

// if you want to execute it right away
timerFunction();

// start the timer
timer = setInterval(timerFunction, 1000);
2 голосов
/ 02 марта 2012

Если у вас есть кусок кода, который нужно запускать каждую ~ 1 секунду, вы можете использовать setInterval и забыть цикл.

setInterval(function() { 
    // do stuff 
    }, 1000);  // every second (or so... not real time, but close enough)

Я считаю, что это выполняет то, что вы просите. Кажется, что вы хотите запускать код в цикле каждую секунду, так что это будет сделано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...