2016-10-04 1 views
0

У меня есть настройка расписания узлов для создания нескольких заданий cron, эти задания cron создаются динамически в цикле. Код внутри schedule.scheduleJob обратный вызов должен иметь доступ к текущему правилу, которое выполняется.node-schedule Как я могу получить доступ к текущему правилу, которое выполняется?

Так что если бы у меня был cron, работающий каждые 1, 2 и 3 минуты, я бы хотел получить доступ к правилу, чтобы он сказал мне, что мой 1 минута cron работает сейчас.

// Create new cron for each iteration (creating 1-10 mins) 
for (var x = 1; x<10; x++){ 
    var rule = new schedule.RecurrenceRule(); 
    rule.minute = new schedule.Range(0, 59, x); 
    schedule.scheduleJob(rule, (RULE_SHOULD_ BE_HERE) => { 
    // Can I access the RULE which is being executed NOW somehow?! 
    functionThatRunsEveryX(rule.minute.step); 
    }); 
} 

Я бы подумал, что смогу получить доступ к правилу через конструктор обратного вызова! Есть ли способ сделать это

ответ

0

так, как я это исправил было создать объект, назначить расписание этого объекта, а затем создать свойство на объекте, который держит правила.

Как так:

for (var x = 1; x<10; x++){ 
    var rule = new schedule.RecurrenceRule(); 
    rule.minute = new schedule.Range(0, 59, x); 
    // Do not use()=> fat arrow, we need access to this of job 
    var job = schedule.scheduleJob(rule, function() { 
    // Must use this to access rule 
    functionThatRunsEveryX(this.rule.minute.step); 
    }); 
    job.rule = rule; 
    // Assign more values here if you wish job.foo = bar 
} 

Вы не должны использовать жирную стрелку ()=> {, вместо этого вы должны использовать обычный function() { способ создания функции. Если вы используете метод толстой стрелки, у вас не будет доступа к job.rule через this.rule.

Смежные вопросы