2016-10-07 7 views
1

私はあなたが例えば名前で一つ一つ...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(); 

を削除することができますが、私は一つ一つを削除するには、それらを介して、すべてのスケジュールされたジョブと、ループを取得するためのコードを希望docsからご覧ください。私は、次の各ジョブを削除するJOBLISTを通じてIループやるか...

{ '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; 

を取得すると思いますか?

代替コード:

var jobList = schedule.scheduledJobs; 

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

答えて

1

おそらくない最もエレガントなアプローチが、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()'); 
    } 
} 

を、あなたはまたのために-で使用することができます。

var jobList = schedule.scheduledJobs; 

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

私が手 'jobList.Announcement0.cancel() ^ はTypeError:プロパティを読み取ることができません未定義 'の 'キャンセル' 10 ジョブが存在するかどうかわからないので、ジョブをキャンセルしようとする前にジョブが存在するかどうかをテストするにはどうすればいいですか? – MorningSleeper

+0

DeleteTesting0がジョブのリストに存在しないため、このエラーが発生します。私は、ジョブを削除する前に存在するかどうかをチェックして答えを更新しました。 –

+0

オプションを使って、感謝、btw、私はオブジェクトを通過し、質問の下部に追加したようなコードで各ジョブを削除することができますか?すべての仕事が削除されても気にしない。 – MorningSleeper

2

離れて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); 
関連する問題