setInterval 简介

     setInterval()方法可按照指定的周期来调用函数或者计算表达式(以毫秒为单位)

setInterval 启动

语法 :setInterval(函数表达式,毫秒数);

如:间隔十秒打印一次 test

setInterval(function () {
    console.log('test')
}, 1000)
setInterval 停止

语法:clearInterval(interval)

由于 nodejs 是异步的,所以以下代码并不能打印 print,因为定时任务在启动时就结束了


 //定时任务
function func() {
    console.log("print")
}

//启动,func不能使用括号
var interval = setInterval(func, 2000); 

//停止
clearInterval(interval);

简单实例

每隔 0.5s 打印一次,总共打印十次后,停止定时任务,通过setTimeout “睡眠” 5s 之后,再次启动定时任务,每隔 5s 打印一次


let count = 0

//定时任务
function func() {
    count++
    console.log('第' + count + '条消息')
    if (count === 10) {
        //停止定时任务
        clearInterval(interval);
        setTimeout(() => {
            console.log("重新启动定时任务")
            //重新启动定时任务
            interval = setInterval(func, 5000);
        }, 5000)
    }
}

//启动,func不能使用括号
let interval = setInterval(func, 500);
setInterval 与 setTimeout 区别
  • setTimeout()方法只运行一次,也就是说当达到设定的时间后就出发运行指定的代码,运行完后就结束了

  • setInterval()是循环执行的,即每达到指定的时间间隔就执行相应的函数或者表达式,是真正的定时器。

node-schedule 简单使用

以上的两种方法,适合隔固定时间执行的任务,如果想要设定具体的时间执行的任务,比如 每天8:00执行、每年2月5号7点59执行,可以使用 node-schedule 来完成定时任务,简单说一下用法

schedule.scheduleJob('30 * * * * *',()=>{
        console.log('scheduleCronstyle:' + new Date());
    }); 

*代表通配符

*  *  *  *  *  *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │  |
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

6个占位符从左到右分别代表:秒、分、时、日、月、周几

node-schedule 详细用法参考如下博客
https://www.jianshu/p/8d303ff8fdeb.

更多推荐

setInterval的启动与停止,以及node-schedule的简单使用