you want your delayed jobs to run only once even if they are triggered several time during a fixed delay? Then you need unique-kue.
unique-kue is a kue plugin that adds a new method to kue: jobs.create_unique_delayed(type, key, delay, options)
npm install unique-kue
kue = require('kue');
unique_kue = require('unique-kue');
unique_kue.setup(kue);
jobs = kue.createQueue();
jobs.create_unique_delayed('email_summary', 'email-summary-project-123456', 60000, {
title: 'project dashboard'
, to: '[email protected]'
, template: 'this week progress...'
});
//the job will be saved automatically
setTimeout(function() {
jobs.create_unique_delayed('email_summary', 'email-summary-project-123456', 60000, {
title: 'project dashboard'
, to: '[email protected]'
, template: 'this week progress...'
});
}, 40000); //creating the same job, 40s later (with a 60s) delay
//only the second job will be run
If you don't want a delayed job to run, you can delete it using the same key you used to create it:
jobs.delete_unique('email-summary-project-123456');