a queue runner with priorities, concurrency and promises
npm install asap-es
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 |
---|---|---|---|---|---|---|
✔️ | ✔️ | ✔️ | ✔️ | |||
✖️ | ✔️ | ✖️ | ✖️ | |||
✔️ | ✔️ | ✖️ | ✖️ | |||
✔️ | ✔️ | ✔️ | ✖️ | |||
✔️ | ✔️ | ✖️ | ✖️ | |||
✔️ | ✔️ | ✔️ | ✔️ | |||
✔️ | ✔️ | ✔️ | ✔️ |
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) |
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
})))