Node动态定时任务

Node使用node-schedule库实现动态添加和移除任务

1. 构造一个类,定义增加和移除 task任务方法

2. 使用setInterval模拟添加和移除task任务

3. node-schedule 规则如下

*    *    *    *    *    *
 ┬    ┬    ┬    ┬    ┬    ┬
 │    │    │    │    │    │
 │    │    │    │    │    └ 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)
let schedule = require('node-schedule');

const _1day = '0 0 0 * * *';
const _1second = '*/1 * * * * *'

let i = 0;
/*schedule.scheduleJob(_1second,function () {
    console.log(i++)
})*/

let taskIds = [];

class Task {
    constructor(){

    }
    addTask(time,name,i){
        let id = schedule.scheduleJob(time,function () {
            console.log(name+':'+i)
        })
        taskIds.push(id)
    }
    removeTask(i){
        rv(i)
    }
}

function rv(i) {
    if (taskIds.length==0){
        console.log('all task has be cleared');
        return;
    }
    if (i<=taskIds.length-1){
        taskIds[i].cancel();
        taskIds.splice(i,1)
    } else {
        i--;
        rv(i);
    }

}

function getRanNum(){
    var result = [];
    for(var i=0;i<4;i++){
        var ranNum = Math.ceil(Math.random() * 25); //生成一个0到25的数字
        //大写字母'A'的ASCII是65,A~Z的ASCII码就是65 + 0~25;然后调用String.fromCharCode()传入ASCII值返回相应的字符并push进数组里
        result.push(String.fromCharCode(65+ranNum));
    }
    return  result.join('');
}

let t = new Task();
    let ti = 0;
    setInterval(function () {
        if (ti==5){
            console.log('has be returned')
            return;
        }else {
            t.addTask(_1second,getRanNum(),ti++)
        }

    },1000)
    setTimeout(function () {
        setInterval(function () {
            let id = Math.floor(Math.random()*taskIds.length)
            t.removeTask(id)
        },1000)
    },5000)






运行结果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值