node-schedule-queue
Version:
Promise queue with schedule
39 lines (32 loc) • 762 B
JavaScript
;
const Queue = require("promise-queue");
const Schedule = require("node-schedule");
const EventEmitter = require("events").EventEmitter;
function create(name, cron, job, pending=1) {
const queue = new Queue(pending, Infinity);
const eventEmitter = new EventEmitter();
const emit = eventEmitter.emit.bind(eventEmitter);
function invoke() {
return new Promise((resolve, reject) => {
queue.add(async function () {
try {
const data = await job(emit);
return resolve(data);
} catch (error) {
return reject(error);
}
});
});
}
Schedule.scheduleJob(name, cron, invoke);
return {
name,
createAt: Date.now(),
invoke,
on: eventEmitter.on.bind(eventEmitter),
emit
};
}
module.exports = {
create
};