Run async and promise-returning functions with limited concurrency and optional rate limiting.
Add dependency from JSR: @dbushell/carriageway
Deno imports from mod.ts
. Other runtimes import from index.min.js
(Bun, Node, web browsers). Node requires --js-promise-withresolvers
flag.
Create a new queue:
const queue = new Queue();
Append an item with a callback function:
queue.append('task', (name) => {
console.log(`${name} complete`);
});
append
returns a deferred promise that resolves the callback when the queued item is run. The item is passed to the callback as the first parameter.
queue
.append('task', (name) => `${name} complete`)
.then((message) => console.log(message));
Callbacks can be functions, async functions, or promise-returning functions.
Items can be anything; primitive types, objects, instances, etc.
queue.append({wait: 1000}, async ({wait}) => {
await new Promise((resolve) => setTimeout(resolve, wait));
console.log(`waited ${wait}ms`);
});
Other feature examples:
See the examples
directory for full usage.
The Queue
constructor accepts an options object. Options can also be changed with the instance setter methods.
const queue = new Queue({ concurrency: 5 });
queue.concurrency = 10;
Maximum number of active items running at once (default: 1).
Minimum number of milliseconds between start of each item (default: 0).
Add an item and callback to the end of the queue.
Add an item and callback to the start of the queue.
Returns true if item is queued (active or waiting).
Returns the deferred promise for the item.
Empty the queue of waiting items. Deferred promises are rejected with a QueueError
. Pending items are not cleared.
Inspired by plimit, p-throttle, and p-queue.
MIT License | Copyright © 2024 David Bushell