Using Kue I discovered that most of the new jobs in my system are created on reaction to some other jobs finish. After implementing a little helper function it got a little better, but it still left a lot of repetetive parts in the code which managed the sequencing of jobs. So I went a little further to make what's happening on what more clear. This is what came out.
npm install kue-chain
First define your job types which inherit from Kue.Job:
var Job = require('kue').Job;
var util = require('util');
function TakeApart(thing) {
Job.call(this, 'takeapart', {
thing: thing
});
}
util.inherits(TakeApart, Job);
function Repair(pieces, takeApartJobData) {
Job.call(this, 'repair', {
thing: takeApartJobData.thing,
parts: pieces
});
}
util.inherits(Repair, Job);
[...]
Start combining:
var kue = require('kue');
var jobs = kue.createQueue();
var when = require('kue-chain')(jobs, kue.Job);
when(TakeApart).then(Repair);
when(Repair).then(PutBackTogether);
Sometimes a little more control is needed:
/*
ensure GoToStore and Buy are Kue Jobs...
*/
when(GoToStore).then(function (result, job.data, job, then) {
checkTheShoppinglist(function (list) {
// Buy each of the list items
list.forEach(function (item) {
then(new Buy(item));
});
// Always buy beer
then(new Buy('beer'));
});
});
And at other times you just need a shortcut to creat them:
var takeApartJob = new TakeApart('scooter');
takeApartJob.save();
Module exports a function. The chainer:
This is needed for setup and setting up the job complete listener.
Function takes a parent job as well a string for the job type and returns a object with one property: then
.
Function takes a child Job, which, as well as ParentJob, has to inherit from the Kues Job prototype, or a function job(result, Object completedJobData, Job completedJob, Function then)
. then
function here takes instance of a job and saves it.