Я могу видеть, работает ли таймер все еще?

Простой вопрос здесь, что я, может казаться, не нахожу ответ для: Однажды a setTimeout установлен, там какой-либо способ видеть, установлен ли он все еще, ну, в общем?

if (!Timer)
{
    Timer = setTimeout(DoThis,60000);
}

Из того, что я могу сказать, когда Вы clearTimeout, переменная остается в ее последнем значении. A console.log Я просто посмотрел на шоу Timer как являющийся '12', неважно, если тайм-аут был установлен или очищен. Я должен аннулировать переменную также или использовать некоторую другую переменную в качестве булева высказывания, да, я установил этот таймер? Конечно, существует способ просто проверить, чтобы видеть, работает ли тайм-аут все еще... правильно? Я не должен знать, сколько времени оставлен, просто если это все еще работает.

62
задан 14 July 2010 в 18:32

3 ответа

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

var timer;
//..
var startTimer = function() {
  clearTimeout(timer);
  timer = setTimeout(DoThis, 6000);
}

Это очистит любой таймер прежде, чем запустить новый экземпляр.

7
ответ дан 31 October 2019 в 14:01

я знаю, что это - некрорегистрация, но я думаю все еще, что люди ищут это.

Это - то, что я использую: 3 переменные:

  1. t для миллисекунд с тех пор.. в Объекте Даты для следующей цели
  2. timerSys для фактического интервала
  3. seconds порог для миллисекунд был установлен

следующий, я имею function timer с 1 переменной функциональные проверки, если переменная действительно , раз так он проверяет, работает ли таймер уже и если это верно, чем заливки глобальный Вар , если не действительно , ложно , очищает интервал и устанавливает global var timerSys на [1 138] ложь ;

var t, timerSys, seconds;

function timer(s) {
  if (s && typeof s === "number") {
    if (typeof timerSys === "boolean" || typeof timerSys === "undefined") {
      timerSys = setInterval(function() {
        sys();
      }, s);
      t = new Date().setMilliseconds(s);
      seconds = s;
    }
  } else {
    clearInterval(timerSys);
    timerSys = false;
  }
  return ((!timerSys) ? "0" : t)
}

function sys() {
  t = new Date().setMilliseconds(seconds);

}

пример I

Теперь можно добавить строку к [1 120] функция sys :

function sys() {
  t = new Date().setMilliseconds(seconds);
  console.log("Next execution: " + new Date(t));
//this is also the place where you put functions & code needed to happen when interval is triggerd

}

И выполнитесь:

  timer(5000);

Каждые 5 секунд в консоли:

  //output:: Next execution: Sun May 08 2016 11:01:05 GMT+0200 (Romance (zomertijd))

пример II

function sys() {
  t = new Date().setMilliseconds(seconds);
  console.log("Next execution: " + seconds/1000 + " seconds");

}

$(function() {
  timer(5000);
});

Каждые 5 секунд в консоли:

      //output:: Next execution: 5 seconds

Примечание в качестве примера III

var t, timerSys, seconds;

function timer(s) {
  if (s && typeof s === "number") {
    if (typeof timerSys === "boolean" || typeof timerSys === "undefined") {
      timerSys = setInterval(function() {
        sys();
      }, s);
      t = new Date().setMilliseconds(s);
      seconds = s;
    }
  } else {
    clearInterval(timerSys);
    timerSys = false;
  }
  return ((!timerSys) ? "0" : t)
}

function sys() {
  t = new Date().setMilliseconds(seconds);
  console.log("Next execution: " + seconds / 1000 + " seconds");

}

$(function() {
  timer(5000);

  $("button").on("click", function() {
    $("span").text(t - new Date());
  })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Freebeer</button>
<span></span>

таким образом можно понизиться 0

1
ответ дан 31 October 2019 в 14:01

Я обычно аннулирую таймер:

var alarm = setTimeout(wakeUpOneHourLater, 3600000);
function wakeUpOneHourLater() {
    alarm = null;    //stop alarm after sleeping for exactly one hour
}
//...
if (!alarm) {
    console.log('Oops, waked up too early...Zzz...');
}
else {
    console.log('Slept for at least one hour!');
}
1
ответ дан 31 October 2019 в 14:01