express-post-task-scheduler
Version:
A lightweight npm package to create and manage scheduled tasks using Express middleware. Configure tasks via POST requests and execute them at specified times seamlessly.
35 lines (34 loc) • 1.53 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.scheduleTask = scheduleTask;
const node_schedule_1 = __importDefault(require("node-schedule"));
const scheduleJobs_1 = require("./scheduleJobs");
const db_1 = require("./utils/db");
const logger_1 = require("./utils/logger");
/**
* Schedule a task and wait for executing, return the job
* @param date the date time to start task
* @param data array with the params for task, for example: [{ id:1, value:1 }, { id:2, value:2 }, { id:3, value:3 }]
* @param executor the callback function to execute, for example: (index: number) => { console.log(index) }
*/
function scheduleTask(date, data, executor, taskId) {
const job = node_schedule_1.default.scheduleJob(date, async () => {
const db = db_1.DB.init();
await db.startTask(taskId);
for (const { id: itemId, value: itemValue } of data) {
try {
await executor(itemValue);
await db.markItemSuccessful(taskId, itemId, JSON.stringify(itemValue));
}
catch (e) {
logger_1.logger.error(e?.message);
await db.markItemFailed(taskId, itemId, JSON.stringify(itemValue), e?.message || "unknown error");
}
}
await db.finishTask(taskId);
});
scheduleJobs_1.ScheduleJobs.appendJob(taskId, job, executor);
}