0

我已经设置了节点计划来创建多个 cron 作业,这些 cron 作业是在循环中动态创建的。schedule.scheduleJob回调中的代码需要访问正在执行的当前规则。

因此,如果我有一个每 1、2 和 3 分钟运行一次的 cron,我希望访问该规则,这样它就会告诉我我的 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);
  });
}

我想我可以通过回调构造函数访问规则!有没有办法做到这一点

4

1 回答 1

1

我解决此问题的方法是创建一个对象,将计划分配给该对象,然后在包含规则的对象上创建一个属性。

像这样:

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.rulevia this.rule

于 2016-10-06T23:44:24.847 回答