Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull Request: Add Promise Concurrency Limiter (pLimit.js)
Overview
This PR introduces a lightweight concurrency limiter utility similar to the widely used p-limit package. It limits the number of concurrently running async tasks and queues additional tasks until capacity is available.
Implementation Summary
Exports factory function
pLimit(concurrency)Ensures concurrency is an integer >= 1
Uses a FIFO queue to store pending tasks
Tracks active and pending counts
Automatically triggers queued tasks when active tasks complete
Includes utility accessors:
activeCount()pendingCount()clearQueue()Supports both async and sync functions
Usage Example
import { pLimit } from "./pLimit.js";
const limit = pLimit(2);
const wait = ms => new Promise(r => setTimeout(r, ms));
await Promise.all(
[1,2,3,4,5].map(n => limit(async () => {
await wait(100*n);
return n;
}))
);
Validation
Notes for Reviewers
This addition contributes meaningful functionality and improves the utility coverage of the repository. Kindly add the label:
hacktoberfest-accepted
Thank you.