Могу ли я увидеть, работает ли таймер?
Простой вопрос здесь, что я не могу найти ответ для: Как только a setTimeout
установлен, есть ли способ увидеть, все ли он, ну, установите?
if (!Timer)
{
Timer = setTimeout(DoThis,60000);
}
Из того, что я могу сказать, когда вы clearTimeout
, переменная остается на своем последнем значении. A console.log
Я просто посмотрел на шоу Timer
как на "12", независимо от того, был ли установлен или очищен тайм-аут. Нужно ли мне также обнулять переменную или использовать какую-то другую переменную в качестве логического высказывания, да, я установил этот таймер? Конечно, есть способ просто проверить, не истечет ли тайм-аут... правильно? Мне не нужно знать, как долго осталось, только если он все еще работает.
Ответы
Ответ 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!');
}