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);