avatar

后端/node-schedule定时任务

需求:
定时触发一个任务,此任务又是一个循环任务。

使用node-schedule
注意:一定要 给每个任务设置名字。百度是不可能百度到的。全是一堆相同的粘贴的!!!!建议到git的issus和stack去找写法。
双层定时器。第一层触发时间,第二次是循环间隔触发。
2个取消任务的方法。根据名字取消。根据配置来取消。每次开启定时时,先把之前在跑的同名任务全部干掉!

下面粘贴一下伪代码吧

// 生成新的定时任务
let interval = async (options) => {
return new Promise(async (resolve) => {

let date = new Date(Date.now() + 5000);

console.log('任务已启动,将在5秒后运行');
// 终止之前的定时任务
await cancelTaskOptions(options);
// cancelTaskName(`${options.name}_${options.id}_${date.getTime()}`);
// cancelTaskName(`${options.name}_${options.id}`);
// 按照固定格式,设定定时任务,这里使用每条数据的名称+唯一字段ID,作为任务名称存入定时任务列表中
// 任务名称就是'名字_id'
let toArray = options.to.split(',');

let counter = 0;
schedule.scheduleJob(`${options.name}_${options.id}`, date, async () => {
  console.log('定时时间到了,开始执行~~~~~~~~');


  schedule.scheduleJob(
    `${options.name}_${options.id}_polling`,
    `*/${options.interval} * * * * *`, //设置执行间隔
    async () => {
      console.log('我是定时任务中的循环任务,我开始执行了!');
      try {

      } catch (error) {
        console.log('定时器触发次数:' + counter);
        counter++;
      }
    }
  );
});

// setTimeout(() => {
//     editMaintainTime(options)
//     console.log('任务结束了');
// }, 10000);

});
};

async function cancelTaskName(taskName) {
// 查看所有的定时任务
for (let i in schedule.scheduledJobs) {
console.error(‘任务删除前:’ + i);
}
if (schedule.scheduledJobs[${taskName}]) {
console.log(‘终止定时任务’, ${taskName});
await schedule.scheduledJobs[${taskName}].cancel();
}
console.log(‘根据任务名称删除成功’);
// 查看剩下的定时任务
for (let i in schedule.scheduledJobs) {
console.error(‘任务删除后:’ + i);
}
}
async function cancelTaskOptions(options) {
// 查看所有的定时任务
for (let i in schedule.scheduledJobs) {
console.error(‘任务删除前:’ + i);
}
// 终止之前的定时任务
if (schedule.scheduledJobs[${options.name}_${options.id}_polling]) {
console.log(‘终止定时循环任务:’, ${options.name}_${options.id}_polling);
await schedule.scheduledJobs[${options.name}_${options.id}_polling].cancel();
}
if (schedule.scheduledJobs[${options.name}_${options.id}]) {
console.log(‘终止定时任务’, ${options.name}_${options.id});
await schedule.scheduledJobs[${options.name}_${options.id}].cancel();
}
// 查看剩下的定时任务
for (let i in schedule.scheduledJobs) {
console.error(‘任务删除后:’ + i);
}
}

文章作者: 小黑
文章链接: http://yoursite.com/2023/01/17/后端/node-schedule定时任务/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小黑的小站
打赏
  • 微信
    微信
  • 支付寶
    支付寶
2