2016-07-24 177 views
0

我需要一個高度可靠的定時器/時鐘來監視時間,並在每5分鐘(實際上5分-1秒,例如xx:59)觸發。它需要是異步的,因爲5分鐘處的觸發器將調用一個或多個將在後臺執行任務的函數。定時器每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

這不會是「精確」的......它可能在x:x [49]:59.0或x :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