Могу ли я увидеть, работает ли таймер? - программирование
Подтвердить что ты не робот

Могу ли я увидеть, работает ли таймер?

Простой вопрос здесь, что я не могу найти ответ для: Как только a setTimeout установлен, есть ли способ увидеть, все ли он, ну, установите?

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

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

4b9b3361

Ответ 1

В любом случае нет возможности взаимодействовать с таймером, кроме как запускать его или останавливать. Я обычно нулевую переменную таймера в обработчике тайм-аута вместо того, чтобы использовать флаг, чтобы указать, что таймер не работает. Там хорошее описание W3Schools о том, как работает таймер. В их примере они используют переменную флага.

Значение, которое вы видите, это handle для текущего таймера, который используется, когда вы очищаете его. p >

Ответ 2

Что я делаю:

var timer = null;

if (timer != null) {
  window.clearTimeout(timer); 
  timer = null;
}
else {
  timer = window.setTimeout(yourFunction, 0);
}

Ответ 3

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

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

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

Ответ 4

Задайте другую переменную Timer_Started = true вашим таймером. А также измените переменную на false при вызове функции таймера:

// set 'Timer_Started' when you setTimeout
var Timer_Started = true;
var Timer = setTimeout(DoThis,60000);

function DoThis(){

   // function DoThis actions 
   //note that timer is done.
   Timer_Started = false;

}

function Check_If_My_Timer_Is_Done(){

   if(Timer_Started){
      alert("The timer must still be running.");
   }else{
      alert("The timer is DONE.");
   }

}

Ответ 5

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

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

  • t за миллисекунды, поскольку.. в объекте Date для следующей цели
  • timerSys для фактического интервала Установлен порог
  • seconds для миллисекунд.

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

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

Теперь вы можете добавить строку в функцию 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>

Ответ 6

Я обычно сбрасываю таймер:

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!');
}