SetInterval, работает или нет

Статус
Закрыто для дальнейших ответов.

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
Здравствуйте!!!

Такой вопрос:
Как проверить - в даный момент выполняется или нет функция? Функция содержит метод setInterval поэтому может работать достаточно длительное время...
 

aspirin

Well-Known Member
Регистрация
23.04.2011
Сообщения
127
Код:
console.log("Now: " + Date() + ",and i'm still running!");
вставить в функцию и смотреть в консоли, пойдет?
 

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
[member=aspirin],[member=AngelGabriel], я имел ввиду чтобы другая функция (а не я) узнала выполняется-ли еще setinterval или нет... и, в зависимости от этого принимать какие либо действия.
например, если setinterval еще работает - пусть работает, а если нет - alert("уже закончил").
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
А вы когда делаете clearInterval() тогда и вызывайте то че надо)
 

CamaroSS

Well-Known Member
Регистрация
21.02.2012
Сообщения
176
Вызов console.log() обернуть бы в try-catch, а то мало ли какой браузер попадётся. А чтобы в скрипте проверить, активирован ли таймер конкретного setInterval, я делал глобальный массив arTimers, и, например, делал так
Код:
arTimers.timer_one = window.setInterval(function(){},time);
А чтобы в коде проверить, запущен ли таймер, нужно юзать "typeOf" и "=== null" в зависимости от того, проинициализирован ли конкретный элемент arTimers в данном месте скрипта. Если не проинициализирован, то (typeOf(arTimers.timer_one) == 'undefined'). Если был вызов clearInterval, то (arTimers.timer_one === null).
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
CamaroSS, как вариант, но задача ТС нехило размыта, я плохо понял смысл.
Как мониторить таймер постоянно, повесить еще один таймер на таймер, который бедет typeof мониторить, или в цикле что бы это все зависло к чертовой бабушке??
 

CamaroSS

Well-Known Member
Регистрация
21.02.2012
Сообщения
176
Не, цикл - это суицид для браузера в данном случае. Функция может вызываться, скажем в течении 30 сек. пару раз, а while сколько раз за это время пробежит? В зависимости от поставленных целей можно проверять статус раз в (T/[4,8,10,хз]) мс, где T - период setInterval. Если следилка продолжает работать, то надо ей удалять "обnullённый" интервал, чтоб не ловить потом кучу весёлых алертов, о том, что работа закончена.
А если нужна JIT-реакция, то пихать обработчик сразу после clearInterval, таймеры вроде бы не поддерживают событий.
 

CamaroSS

Well-Known Member
Регистрация
21.02.2012
Сообщения
176
А чтобы в коде проверить, запущен ли таймер, нужно юзать "typeOf" и "=== null" в зависимости от того, проинициализирован ли конкретный элемент arTimers в данном месте скрипта. Если не проинициализирован, то (typeOf(arTimers.timer_one) == 'undefined'). Если был вызов clearInterval, то (arTimers.timer_one === null).
typeof, естественно, без большой О.
 

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
А вы когда делаете clearInterval() тогда и вызывайте то че надо)
Это не подходит...

задача ТС нехило размыта, я плохо понял смысл
Извините.

А чтобы в скрипте проверить, активирован ли таймер конкретного setInterval
Ну да. [member=CamaroSS] меня понял! Как проверить активирован ли конкретный таймер? И получить результат: true (если выполняется/активирован) или false (если нет).
 

CamaroSS

Well-Known Member
Регистрация
21.02.2012
Сообщения
176
Расписал же, дальше пост прочитать нэ?
 

czp

czp
Регистрация
05.06.2011
Сообщения
635
Код:
var i = 0;
start = setInterval(function () { if (start) { alert('it work'); ++i; }; if (i == 5) {clearInterval(start); alert('stop interval')} },1000);
наверное как то так :cool: , ну сам принцип остановки
или я вопрос не так понял?
 

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
Расписал же, дальше пост прочитать нэ?
Я прочитал, спасибо!
задача ТС нехило размыта
У меня не получается остановить предыдущий setInterval при повторном вызове функции. (это не совсем то, что я имел ввиду сначала - но конкретнее)

Код:
<script>
function gr(){
clearInterval(set);//НЕ СРАБАТЫВАЕТ - ...почему?..
//setInterval от предыдущего вызова функции продолжает работать
var m//=...
var n//=...
var set = setInterval(function(){
m=n+(m-n)/6;
document.documentElement.scrollLeft=m;
}, 25)
}
</script>

<body>
<a onclick="gr();">Кнопка</a>
</body>
 

CamaroSS

Well-Known Member
Регистрация
21.02.2012
Сообщения
176
Не срабатывает потому, что переменную set надо глобально объявлять (до объявления функции gr, а не в её теле). При следующем запуске функции она уже не будет помнить никакого set. И вообще в твоём примере clearInterval() всегда вызывается с ещё не объяленной переменной в кач-ве аргумента.
 
  • Like
Реакции: vla

vla

Well-Known Member
Регистрация
16.09.2011
Сообщения
230
Не срабатывает потому, что переменную set надо глобально объявлять
СПАСИБО!!!!! Вот это я тупанул... ВСЁ РАБОТАЕТ!

Сделел так:

Код:
<script>
var set
function gr(){
clearInterval(set);//РАБОТАЕТ!!!
var m//=...
var n//=...
set = setInterval(function(){
m=n+(m-n)/6;
document.documentElement.scrollLeft=m;
}, 25)
}
</script>
<body>
<a onclick="gr();">Кнопка</a>
</body>
 
Статус
Закрыто для дальнейших ответов.
Верх Низ