天天看點

js定時器每天定時執行任務

現在,我有一個需求:在nodejs搭建的中間層,定時清理某個檔案夾的資源,具體一點,每天淩晨三點對伺服器的檔案執行一次清理。我的思路是:寫一個方法,在服務啟動時執行這個方法,這個方法首先加入setTimeout定時器延遲到指定的時間點執行,setTimeout内的回調函數加入一個setInterval定義器,setInterval定義器執行的回調函數延遲到下一個時間點就可以了。是以,我的實作方法簡略如下:

首先,定義一個方法,在方法内接收四個參數,一個參數是接收間隔的天數,第二個參數是接收具體某個時間點,第三個參數是決定是否在啟動服務時立即執行一次,第四個參數是一個執行的方法,即要定時執行的邏輯。當然,這前三個參數将定義在一個對象中,實際傳入一個對象和一個函數作為參數就可以,這樣整個對象可以作為配置參數,供運維人員修改。我寫下的函數如下:

timeoutFunc(config, func) {

  config.runNow && func()

  let nowTime = new Date().getTime()

  let timePoints = config.time.split(':').map(i => parseInt(i))

  let recent = new Date().setHours(...timePoints)

  recent >= nowTime || (recent += 24 * 3600000 )

  setTimeout(() => {

     func()

     setInterval(func, config.interval * 3600000 )

  }, recent - nowTime)

}

config參數的說明: {

  interval: 1, //間隔天數,間隔為整數

  runNow: false, //是否立即運作

  time: "14:00:00" //執行的時間點 時在0~23之間

  }

func參數是要執行的方法。

如果需要多個時間點可以調用多次。

實作完畢!