
Security News
The Hidden Blast Radius of the Axios Compromise
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.
esm-async-queue
Advanced tools
Immediately starting queue of asynchronous or synchronous tasks, processing n function(s) concurrently. Dependency free.
A single class Queue to create an immediately starting queue of asynchronous or synchronous functions, processing n tasks concurrently. Dependency free. Exported as an esm module. Typescript definitions included.
npm install esm-async-queue
Example of
import { Queue } from './index.js';
const delayedResolution = (ms: any) =>
new Promise((resolve) => setTimeout(resolve, ms));
const queue = new Queue({ concurrency: 2 });
const startTime = (new Date()).valueOf();
const getElapsedTime = (since) => `${((new Date()).valueOf() - since)}ms`;
queue.push(() => delayedResolution(200).then(() => console.log('a', getElapsedTime(startTime))));
queue.push(() => delayedResolution(400).then(() => console.log('b', getElapsedTime(startTime))));
queue.push(() => delayedResolution(200).then(() => console.log('c', getElapsedTime(startTime))));
queue.push(() => delayedResolution(400).then(() => console.log('d', getElapsedTime(startTime))));
queue.subscribe('idle', () => console.log('idle', getElapsedTime(startTime)));
// output:
// a 205ms
// b 406ms
// c 407ms
// d 811ms
// queueIdle 811ms
Creates a new queue instance.
opts.concurrency: integer, default: 1 The limit of tasks to be processed in parallel.
Add a task to the queue. Processes immediately if the total length of existing tasks is less than the concurrency value.
length: integer count ALL tasks in the queue, including pending tasks.
tasksPending: integer count tasks that are in the queue, awaiting processing.
tasksProcessing:: integer count tasks that are currently processing.
concurrency: integer show count of maximum concurrent tasks.
// Example: This script will print true when all items have been processed (after 200ms). Finally, unsubscribe.
const queue = new Queue({ concurrency: 2 });
const unsubscribe = queue.on('idle', () => console.log(queue.length === 0)); // the returning function allows you to remove a subscription
queue.push(() => delayedResolution(200));
idle: Fired when the total queue length, including tasks processing drops to 0.
taskProcessing: Fired when a task begins processing.
taskProcessed: Fired when a task completes.
taskPushed: Fired when a task is pushed to the queue.
See development.md
FAQs
Immediately starting queue of asynchronous or synchronous tasks, processing n function(s) concurrently. Dependency free.
We found that esm-async-queue demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.