task-handler

A simple, dependency-free task scheduling manager that makes it easy to handle tasks like a boss.
Install
yarn add task-handler
or
npm install --save task-handler
Coverage
This project provides .flow.js
files for Flow
to utilize. It also attempts to provide 100% test coverage.
Example
Simple
import createTaskHandler from "task-handler";
const task = createTaskHandler("simple");
task.after("task:one", 3000, () => log("task:one execute"));
task.every("task:two", 3000, () => log("task:two execute"));
task.defer("task:three", () => log("task:three execute"));
task.everyNow("task:four", 3000, () => log("task:four execute"));
task.everySequential("task:five", 100, async () => {
log("task:five execute");
await new Promise(resolve => setTimeout(resolve, 3000));
log("task:five completes");
});
task.everyNowSequential("task:six", 100, async () => {
log("task:six execute");
await new Promise(resolve => setTimeout(resolve, 3000));
log("task:six completes");
});
task.job(
"task:seven",
function TaskFiveHandler(...args) {
const ref = this;
return {
async start(ref2) {
},
async cancelled() {
},
async complete() {
}
};
},
[1, 2, 3]
);
task.size;
task.cancel("task:one", "task:two");
task.after("complete", 10000, () => {
log("complete - clearing tasks");
task.clear();
});
Promises
When calling .promise()
on the task ref, after
and defer
return regular promises that resolve to the task ref with a result of the function passed. If no function is passed then the ref.result
will be undefined.
task
.after("afterID", 1000, () => 1)
.promise()
.then(ref => {
console.log("After 1000ms: ", ref.result);
});
Interval tasks such as every
and everyNow
return async iterators
when their .promises()
function is called. This allows us to utilize the handy for await... of
feature of JS.
IMPORTANT: Notice that every
and everyNow
use .promises()
and now .promise()
. This is to allow for type safety. These tasks will error if .promise()
is called on them.
async function intervalForAwait() {
for await (const ref of task.every("everyID", 1000).promises()) {
console.log("Next Tick");
ref.cancel();
}
console.log("After Cancel everyID");
}
async function intervalAwait() {
const iter = task.every("everyID", 1000).promises();
let done = false;
let ref;
while (!done) {
let ref;
({ value: ref, done } = await iter.next());
console.log("Next Tick");
ref.cancel();
}
console.log("After Cancel everyID");
}