asap-es
v1.3.3
Published
a queue runner with priorities, concurrency and promises
Downloads
115
Maintainers
Readme
asap-es
a queue runner with priorities, concurrency and promises
installation
npm install asap-es
why
The main goal is to provide lightweight and modern library for queuing tasks. The name was inspired by the asap library. There is already a few libraries with similar functionality, yet this is another one.
| lib | async | sync | concurrency | priority | size | license | | ---: | :---: | :---: | :---: | :---: | :---: | :--- | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | | ✖️ | ✔️ | ✖️ | ✖️ | | | | | ✔️ | ✔️ | ✖️ | ✖️ | | | | | ✔️ | ✔️ | ✔️ | ✖️ | | | | | ✔️ | ✔️ | ✖️ | ✖️ | | | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | | ✔️ | ✔️ | ✔️ | ✔️ | | |
api
| name | description |
| ---: | :--- |
| new <ctor>(c)
| create new asap-es instance, optinal concurrency can be passed as argument |
| <ctor>(c)
| same as above |
| <instance>.c
| the number of tasks to run simultaneously (1
by default), set to < 1
to pause the queue |
| <instance>.q(task, priority)
| enqueue a new task, returns a promise which resolves or rejects when execution of the task is finished, optionally pass priority |
| task | task is a function which may return a value or a promise (task awaits for promise completion) |
usage example
import asap from "asap-es";
import delay from "asap-es/delay";
import timeout from "asap-es/timeout";
// you can have many independent queues
const queue = new asap();
// paused queue will not run tasks
const queuePaused = new asap(false);
// resume the queue by increasing concurrency
queuePaused.c++;
// promises
queue.q(() => Promise.resolve(2)).then(console.log);
// console >> 2
// pause the queue
queue.c = 0;
// async functions
queue.q(async () => {
// do some async things
});
// task with higher priority
queue.q(() => void 0, -1);
// set concurrency and resume the queue
queue.c = 2;
// delay execution of a task by 20 ms
queue.q(delay(20, () => void 0));
// handle errors
queue.q(() => {
throw new Error();
}).catch(console.error);
// console >> error
// timeout a task after given time
queue.q(timeout(200, () => {
// a long task
}));
// combine delay and timeout
queue.q(delay(10, timeout(5, () => {
// this task waits 10 ms for execution, then timeouts in 5 ms
})))