javascript - 使用渗透 :synced-cron 的多个 cron 作业

标签 javascript meteor cron

大家好,我尝试在特定时间后向我收藏中的某些用户发送电子邮件。用户填写表格:

  Template.decisionSetUp.events({
    'submit form':function(event,t){
     var closeDateDB = moment($('[name="date"]').val(), 'DD.MM.YYYY HH:mm').toDate();
    Questions.insert({closeDateDB: closeDateDB},
          function (error,results){
            Router.go('decision', {_id:results});
            var decisionId = results;
            console.log(decisionId);
            Meteor.call('decisionEndMail', decisionId);
         }
   );
});

在此之后我实现了一个 cron 作业:

Meteor.methods({'decisionEndMail':function(decisionId) {
      var t = Questions.findOne({_id:decisionId}).closeDateDB;
      console.log(t);

    SyncedCron.add({
    name: 'demo',
    schedule: function (parser) {
    return parser.recur().on(t).fullDate();
    },
    job: function () {
    // job code
    console.log('job function just ran');
    }
    });
    SyncedCron.start();
    }

  });

问题是,它只接受第一个 meteor.call。例如,如果我在 13:30 设置了一个 closeDateDB,并在 13:40 设置了另一个,则作业只发生在第一个。 13:40 的第二个永远不会执行。我在这里缺少什么?

最佳答案

问题是您使用相同的名称两次调用 SyncedCron.add()。查看添加 cron 的代码,您会发现它会默默地忽略任何添加的同名作业。

https://github.com/percolatestudio/meteor-synced-cron/blob/master/synced-cron-server.js#L122-L129

if (!this._entries[entry.name]) {
  this._entries[entry.name] = entry;

  // If cron is already running, start directly.
  if (this.running) {
    scheduleEntry(entry);
  }
}

一个选项是在调用同步 cron 时设置 name: 'decision_'+decisionId,这将确保名称是唯一的(假设您只调用 SyncedCron.add 每个“决定”一次)。

关于javascript - 使用渗透 :synced-cron 的多个 cron 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35177928/

相关文章:

javascript - 获取多级javascript对象属性的简单方法

cordova - 从本地路径将 Cordova 插件添加到 Meteor

arrays - Meteor 中的 MongoDB $elemMatch

meteor - 如何正确使用iron-router的waitOn路由选项?

linux - OpenSuse 13.2 中的 Cron 重启

java - 从现在开始每 14 分钟运行一次 Quartz cron 表达式

php - 将 exec 用于长时间运行的脚本

javascript - 无法在 React quill 自定义处理程序上调用 ref(还有其他类似状态、 Prop 、函数等)

javascript - 将两个数组合并为一个对象

javascript - 鼠标弹起时的 jQuery 切换