Как ограничить количество итераций, выполняемых 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);