simple-ts-job-runner
v1.0.12
Published
Simple NodeJS Job executor
Downloads
214
Readme
TS Job Runner
Simple queue-based job runner for NodeJS. This library is meant to be used in order to organise and run jobs/tasks for a process and also can be used to run any kind of desired function.
Every task in the queue will be executed in sequence.
Tasks can be executed by itself without the use of a Queue or a Job, just calling
new Task(fn).run()
Hooks
Hooks can be used to fulfill the job lifetime, those are:
onSuccess(result)
: executes when job finish with no errors, return the result array as argumentbeforeStart(job)
: executed before the start, return the job to as argumentonError(error)
: executed whenever an error occurs, return the error as an argumentbeforeAll
: executed before starting the queuebeforeEach(task)
: executed before each task, return the next task as argumentbeforeClose
: executed before onFinishafterEach(task)
: executed after each task has finished, return the task as argumentafterAll(job)
: before onCloseafterClose
: executed after onFinishonFinish(errors, results)
: executed whenever the job finished with or without errors, return errors and result array as argument
Usage example
Prepare and run a Job
import { Job, Task } from "simple-ts-job-runner";
function sum(a, b) {
return a + b;
}
function divide(a, b) {
return a / b;
}
async function fetchDataFromSomewhere(userId) {
axios.get(`https://example.com/customers/${userId}`);
}
const job = new Job({ name: "My Job ;)" });
job
.addTask(new Task(sum, { name: "Task1" }), 25, 30)
.addTask(new Task(divide), 10, 2)
.addTask(new Task(fetchDataFromSomewhere, { name: "FetchData" }), userId)
.addHook("beforeEach", (task: Task) => {
console.log(`Started task ${task.name}`);
})
.addHook("afterEach", (task: Task) => {
console.log(`Finished task ${task.name}. Results:`);
console.log(task.results);
})
.addHook("afterAll", (job: Job) => {
SomeService.notify(`Job ${job.name} finished`);
})
.run(); // Job run is async
Run a Task
import { Task } from "simple-ts-job-runner";
// You can use an async function or `.then`
// And can also use hooks:
// onFinish, onSuccess(result), beforeStart(task), and onError(error)
async function runTask() {
const task = new Task(async (userId) =>
axios.get(`https://example.com/customers/${userId}`)
);
const results = await task.run(2);
console.log(result.data);
}