Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除节点计划中的所有计划?_Javascript_Node.js_Scheduled Tasks - Fatal编程技术网

Javascript 如何删除节点计划中的所有计划?

Javascript 如何删除节点计划中的所有计划?,javascript,node.js,scheduled-tasks,Javascript,Node.js,Scheduled Tasks,我看从你可以删除一个一个的名字,例如 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("Announcement

我看从你可以删除一个一个的名字,例如

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] } }
如何循环作业列表以删除每个作业

备选代码:

var jobList = schedule.scheduledJobs;

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

可能不是最优雅的方法,但由于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()');
}

最好远离
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);
一行:

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

我得到'jobList.Announcement0.cancel()^TypeError:无法读取未定义的'cancel'属性,在尝试取消作业之前,我如何测试该作业是否存在,因为我无法确定它是否存在,如果确实存在,则只希望将其删除。出现此错误是因为作业列表中不存在DeleteTesting0。在删除作业之前,我通过检查作业是否存在更新了答案。明白了,谢谢,顺便说一句,作为一个选项,我可以检查对象并使用添加到问题底部的代码删除每个作业吗?我不在乎是否所有作业都被删除。那很好,只要记住如果在结果中使用for,那么结果在常规for循环中是有序的,而不是有序的。所以你可能会经历一些意想不到的行为。根据我的经验,我一般不使用for,但我的领域主要是在前端浏览器设置中使用JavaScript,在那里无法提供意外的行为。我会小心使用eval。为什么不列出作业列表['Announcement'+i].cancel()?另外,为什么scheduledJobs没有出现在节点调度文档中?
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);
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);