2017-01-24 12 views
0

У меня есть функция setTimeout, которая начинается 25 минут и сбрасывает/перезапускает следующие 25 минут. Мой тестовый сценарий явно работает, когда я меняю его с 1500000ms на нечто более короткое, как 1000ms; однако это не происходит, когда я (утомительно) тестирую его каждые 25 минут (1500000 мс). Какие-либо предложения?setTimeout reset для длительных длительностей

// 1000ms = 1s 
 
// 60000ms = 60s   // 1 min 
 
// 1500000 = 1500s  // 25 mins 
 

 
var timer = null; 
 
timer = setTimeout(sessionFunction, 1500000); 
 

 
function sessionFunction() { 
 
    alert('test'); 
 
    clearTimeout(timer); 
 
 
    timer = setTimeout(sessionFunction, 1500000); 
 
}

// 1000ms = 1s 
// 60000ms = 60s   // 1 min 
// 1500000 = 1500s  // 25 mins 

var timer = null; 
timer = setTimeout(sessionFunction, 1500000); 

function sessionFunction() { 
    alert('test'); 
    clearTimeout(timer); 
  
    timer = setTimeout(sessionFunction, 1500000); 
} 
+0

В качестве побочного примечания вы можете использовать 'setInterval' вместо ручной очистки и перезапуска таймера. –

+0

Скрываете ли вкладку браузера при ее запуске? – epascarello

+0

Да, в некоторых случаях. Это будет использоваться в качестве диалогового окна предупреждения о тайм-ауте сеанса, чтобы пользователь мог использовать свою вкладку/окно в фоновом режиме. – theflarenet

ответ

1

Я предлагаю изменение сценарий так, что срабатывает таймер каждую минуту и ​​хранит счетчик каждый раз, когда она выстреливает. Как только счетчик достигнет 25, вы знаете, что прошло 25 минут. Код будет не таким простым, но он избегает проблемы, с которой вы столкнулись, когда таймер не стреляет.

+0

Очень хороший обходной путь! Спасибо! Похоже, это единственный вариант, который у меня есть, поэтому я приму этот ответ; однако я бы хотел увидеть другие альтернативы от других. – theflarenet