Javascript 使用percolate的多个cron作业:同步cron

Javascript 使用percolate的多个cron作业:同步cron,javascript,meteor,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: closeDat

嘿,伙计们,我试着在特定时间后给我收藏中的一些用户发送电子邮件。要填写表格,用户必须执行以下操作:

  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。例如,如果我将closeDateDB设置为13:30,而将另一个设置为13:40,则作业只针对第一个。13点40分的第二个永远不会被执行。我在这里遗漏了什么?

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

一个选项是在对synced cron的调用中设置
name:'decision_'+decisionId
,这将确保名称是唯一的(假设您只调用
SyncedCron.add
每个“decision”添加一次)

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

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