A promise based priority queue with task deduplication, concurrency control, serial resolution and aging.
npm install throttle-queueA promise based priority queue with task deduplication, concurrency control, serial resolution and aging.
``bash`
npm install throttle-queue
# OR
yarn add throttle-queue
* Async jobs with promise support
* Job Deduplication
* Priority Assignment
* Concurrency control
* Aging of jobs to prevent starvation
All while keeping your code execution serial :)
`js
const Queue = require("throttle-queue");
const taskQueue = new Queue({ concurrency: 2 });
taskQueue.setExecutor(async ({ pokemon }) => {
const url = https://pokeapi.co/api/v2/pokemon/${pokemon};
const response = await fetch(url);
return await response.json();
});
const result = await taskQueue.process({ pokemon: "mew" }, "mew")
console.log('I found', result)
`
`js`
const queue = new Queue(options);
#### options
| option | type | default value | description |
| ----------- | ---------------- | ------------- | ----------------------------------------------------------------------------------------------------- |
| concurrency | number | 1 | Maximum number of jobs that can be run concurrently at the same time |
| aging | boolean | true | Whether to age older jobs in order to prevent starvation |
| maxAge | number (seconds) | Infinity | Time in seconds after which the job will expire and removed from the queue if not executed till then. |
`js
const queue = new Queue(options);
queue.setExecutor(params => {
console.log("received params", params);
return "done";
});
`
The task executor picks up the highest priority task from the queue and executes it. It can be synchrounous or asynchronous. When sync, it is internally wrapped in a promise.
`js
const queue = new Queue(options)
queue.setExecutor((params) => {
console.log('received params', params)
return 'done'
})
const result = await queue.process(params, id, options)
`
#### arguments
* params - Object - An data object to pass to the task executor
* id - The id of the task. This is used for deduplication.
* options -
| option | type | default value | description |
| -------- | ---------------- | ------------------------ | --------------------------------------------------------------------------------------- |
| priority | number | 'Queue.priority.LOW' (5) | Priority of the job. |
| maxAge | number (seconds) | Infinity | Time in seconds after which the job will expire. If not set, the global maxAge is used. |
```$3
js```
const queue = new Queue()
queue.clear()
Clears the queues of all waiting jobs. Jobs in execution are not disturbed.
* Optimize perf for cases when there huge number of jobs in the ready queue.