2016-07-24 6 views
0

Мне нужен был высоконадежный таймер/часы, который контролирует время и триггеры каждые 5 минут (фактически 5мин -1 сек., Например, xx: 59). Он должен быть асинхронным, потому что триггер с отметкой 5min вызовет функцию или функции, которые будут выполнять задачу в фоновом режиме.Таймер с триггером каждые 5 минут

Итак ... Я придумал эту суперпростую рутину. Я ищу отзыв. Должен ли я делать что-то другое? Является ли это достаточно надежным решением для использования в производстве? рекомендации и критические замечания приветствуются. Хорошо, плохо или безразлично!

** Редакция: Забыл эту строку коды: minutes = (mminutes < 10 ? "0" : "") + mminutes;

  var minuteData,hours,minutes,seconds; 

      setInterval(function() { 
      var date = new Date; 
      hours = date.getHours(); 
      mminutes = date.getMinutes(); 
      seconds = date.getSeconds(); 
      minutes = (mminutes < 10 ? "0" : "") + mminutes; 
      //get the second digit of minutes 
      minuteData = minutes.toString()[1]; 
      console.log(minuteData); 
      //test if at time x4:59 or x9:59, hence 1 sec before the 5min interval 
      var trigger = ((seconds == 59 && (minuteData == "9" || minuteData == "4")) ? true : false); 
      console.log(trigger); 
      //trigger is just a proxy for a task that will be called 

      }, 1000); 
+0

это обыкновение быть «точным» ... это может вызвать в точке х: х [49]: 59,0 или х : x [49]: 59.999 - почти второе различие –

+0

, вы обнаружите, что это очень неточно, если страница теряет фокус. Я думал, что requestAnimationFrame может помочь, но это не так. –

ответ

1

я бы, вероятно, определить функцию в качестве имени функции, а затем на setInterval - вызов функции. Вероятно, такую ​​же производительность, но позволяет вызвать его на странице загрузки, или о конкретных действиях и т.д.

function testTime(){ 
      var minuteData,hours,minutes,seconds; 
      var date = new Date; 
      hours = date.getHours(); 
      minutes = date.getMinutes(); 
      seconds = date.getSeconds(); 
      //get the second digit of minutes 
      minuteData = minutes.toString()[1]; 
      console.log(minuteData); 
      //test if at time x4:59 or x9:59, hence 1 sec before the 5min interval 
      var trigger = ((seconds == 59 && (minuteData == "9" || minuteData == "4")) ? true : false); 
      console.log(trigger); 
} 


setInterval(function() {testTime()}, 1000); 
+0

Может также использовать локальное хранилище для хранения времени в случае потери фокуса, так как в комментариях также может потребоваться с точностью до миллисекунд – gavgrif

Смежные вопросы