2016-02-03 3 views
1

Привет, ребята, я пытаюсь отправить электронные письма некоторым пользователям в моей коллекции через определенное время. Пользователь, как заполнить форму:Несколько заданий cron, использующих percolate: synced-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); 
     } 
    ); 
}); 

После этого я реализовал хрон:

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 никогда не выполняется. Что мне здесь не хватает?

ответ

3

Проблема в том, что вы звоните 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); 
    } 
} 

Одним из вариантов было бы установить name: 'decision_'+decisionId в вызове синхронизированных хрон, который будет гарантировать, что имя является уникальным (если вы только позвонив SyncedCron.add раз за «решение»).

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