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参数是要执行的方法。

如果需要多个时间点可以调用多次。

实现完毕!

猜你喜欢

转载自blog.csdn.net/u014789022/article/details/85119677