Как ограничить количество итераций, выполняемых setInterval

Я показываю видеорекламы своим пользователям. Кстати, я не размещаю эти объявления; я получаю их от другой компании.

при нажатии на объявление он оставляет файл cookie в браузере пользователя. Я создал функцию, которая проверяет наличие файла cookie каждые 10 секунд.

то, что я хотел бы сделать, - это ограничить количество раз, когда эта функция может работать, или количество секунд, в течение которых она может работать.

ниже есть функцию:

function checkCookie()
{
var cookie=getCookie("PBCBD2A0PBP3D31B");
  if (cookie!=null && cookie!="")
  {
  alert("You clicked on an ad" );
  }

setInterval("checkCookie()", 10000);

Итак, резюмируем. Я хотите ограничить количество итераций, которые setInterval("checkCookie()", 10000); можно сделать

5 ответов


когда вы называете setInterval, он возвращает вам идентификатор интервала, который вы можете использовать, чтобы остановить его, вызвав clearInterval. Таким образом, вы захотите подсчитать итерации в переменной, и как только они достигнут определенного количества, используйте clearInterval С ID, предусмотренных setInterval.

var iterations = 0;
var interval = setInterval(foo, 10000);
function foo() {
    iterations++;
    if (iterations >= 5)
        clearInterval(interval);
}

видео


Это должно сделать это:

function checkCookie() {
    var cookie = getCookie("PBCBD2A0PBP3D31B");
    if (cookie != null && cookie != "") {
        alert("You clicked on an ad");
    }
    if (counter > 10) clearInterval(clr);
    counter++;
    clr = setInterval(function(){checkCookie()}, 10000);​
}
var counter = 0;
checkCookie();

WindowTimers.setInterval(func, delay[, param1, param2, ...])

3-хrd и далее в setInterval являются необязательными параметрами для передачи в функцию interval. Обратите внимание, что эти необязательные аргументы не поддерживаются в IE9 и более ранних версиях.

мы можем использовать это к нашему преимуществу путем во избежание польза глобального или вне-объема. как видно ниже. Функция interval отслеживает предел и текущее приращение счетчика через


вам просто нужна какая-то глобальная переменная счетчика для отслеживания. Например, следующий код будет запускать проверку cookie не более 20 раз за загрузку страницы.

var numChecks = 0;

function checkCookie()
{
    ...

    numChecks++;
    if (numChecks < 20) setTimeout("checkCookie()", 10000);
}

setTimeout("checkCookie()", 10000);

передача обратного вызова функции Interval, которая, в свою очередь, обновляет счетчик в глобальной области:

var countIntervals = 0,
    intervalFunc = function(_callback){

        console.log(countIntervals);

        if(countIntervals > 5) {            
            clearInterval(setIntervalVar);
        } else {
            // do stuff
            _callback();
        }
    };

setIntervalVar = setInterval(intervalFunc.bind(null, function(){
    countIntervals++;
}), 500);