繁体   English   中英

如何删除节点时间表中的所有时间表?

[英]How to delete all schedules in node-schedule?

我从文档中看到您可以按名称一一删除...

var schedule = require('node-schedule');

 // sample announcement

 var rule = new schedule.RecurrenceRule();
 rule.dayOfWeek = [1, 2, 3, 4, 5];
 rule.minute = 50;
 rule.hour = 12;

 var message = schedule.scheduleJob("AnnouncementOne", rule, function() {
    // make my announcement
})

AnnouncementOne.cancel();

但我想要代码来获取所有预定的作业,然后遍历它们以删除每个作业。 我认为以下得到了所有的工作......

var jobList = schedule.scheduledJobs;

输出以下内容到控制台...

{ 'AnnouncementOne':
   Job {
     job: [Function],
     callback: false,
     name: 'AnnouncementOne',
     trackInvocation: [Function],
     stopTrackingInvocation: [Function],
     triggeredJobs: [Function],
     setTriggeredJobs: [Function],
     cancel: [Function],
     cancelNext: [Function],
     reschedule: [Function],
     nextInvocation: [Function],
     pendingInvocations: [Function] },
  'AnnouncementTwo':
   Job {
     job: [Function],
     callback: false,
     name: 'AnnouncementTwo',
     trackInvocation: [Function],
     stopTrackingInvocation: [Function],
     triggeredJobs: [Function],
     setTriggeredJobs: [Function],
     cancel: [Function],
     cancelNext: [Function],
     reschedule: [Function],
     nextInvocation: [Function],
     pendingInvocations: [Function] } }

如何循环遍历 jobList 以删除每个作业?

替代代码:

var jobList = schedule.scheduledJobs;

for(jobName in jobList){
  var job = 'jobList.' + jobName;
  eval(job+'.cancel()');
}

最好远离eval

const schedule = require('node-schedule');
const _ = require('lodash');
const j = schedule.scheduleJob('SomeDirtyWork', '42 * * * *', () => {
  // Something is going on
});

const jobNames = _.keys(schedule.scheduledJobs);
for(let name of jobNames) schedule.cancelJob(name);

可能不是最优雅的方法,但由于 jobList 缺少长度字段,因此有一种方法可以实现这一点:

var schedule = require('node-schedule');

// sample announcement

var rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [1, 2, 3, 4, 5];
rule.minute = 50;
rule.hour = 12;

var message = schedule.scheduleJob("Announcement0", rule, function() {
    // make my announcement
})

var message = schedule.scheduleJob("Announcement1", rule, function() {
    // make my announcement
})

var jobList = schedule.scheduledJobs;

for (var i = 0; i < 2; i++) {
   eval('jobList.Announcement'+i+'.cancel()');
}

这将从列表中删除计划的作业。

要在删除作业之前检查作业是否存在:

for(var i = 0; i < 2; i++){
  var job = 'jobList.Announcement'+i;
  if(eval(job) != undefined) {
    eval(job+'.cancel()');
  }
}

当然,你也可以使用 for-in。 请记住,如果您使用 for-in,则结果没有排序,而结果在常规 for 循环中排序,因此您可能会遇到一些意外行为:

var jobList = schedule.scheduledJobs;

for(jobName in jobList){
  var job = 'jobList.' + jobName;
  eval(job+'.cancel()');
}
var jobList = cron.scheduledJobs; //Get All scheduled jobs

Object.values(jobList).map(job => {
  console.log("Each Job", job.name);

    cron.cancelJob(job.name);
  })

在一行中:

for (const job in schedule.scheduledJobs) schedule.cancelJob(job);

你好我有同样的问题,但你可以使用下面的代码。

var jobList = schedule.scheduledJobs;
for(jobName in jobList){
    // Here inside **jobName** you are getting name of each Schedule.
    var EachJobObject = cron.scheduledJobs[jobName];
    EachJobObject.cancel();
}

以上代码将取消所有节点调度。 它对我有用。

你也可以这样做:

for (const job in schedule.scheduledJobs) schedule.scheduledJobs[job].cancel();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM