https://github.com/mjyocca/async-parallel-limit
Limits the amount of asynchronous operations running in parallel at a given time with a provided callback interface.
https://github.com/mjyocca/async-parallel-limit
async async-await concurrency concurrent nodejs parallel
Last synced: 5 months ago
JSON representation
Limits the amount of asynchronous operations running in parallel at a given time with a provided callback interface.
- Host: GitHub
- URL: https://github.com/mjyocca/async-parallel-limit
- Owner: mjyocca
- License: mit
- Created: 2021-02-25T01:38:13.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2021-03-06T01:29:00.000Z (over 5 years ago)
- Last Synced: 2025-09-28T07:49:06.245Z (8 months ago)
- Topics: async, async-await, concurrency, concurrent, nodejs, parallel
- Language: TypeScript
- Homepage:
- Size: 918 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE.txt
Awesome Lists containing this project
README
[](https://www.npmjs.com/package/@mjyocca/async-parallel-limit))
[](https://www.npmjs.com/package/@mjyocca/async-parallel-limit)
[](https://github.com/mjyocca/async-parallel-limit)
# async-parallel-limit
Limits the amount of asynchronous operations running in parallel at a given time with a provided callback interface.
*Inspired by async's asyncTimesLimit*.
Instead of queueing up an array of asynchronous tasks to run in parallel such as `await Promise.all([...]);`,
&&
Instead of queueing those promises in a form of a batch and waiting for all promises in the batch to resolve before processing the next batch,
`async-parallel-limit`, will queue up the next promise once one in the existing processing queue resolves.
#### Visualized
Example => **12** tasks, limit of **3** in parallel

### Install via npm
```bash
npm i --save @mjyocca/async-parallel-limit
```
Arguments
| Param | Type |
| :---------: | :--------------: |
| tasks | `{Array/number}` |
| limit | `{number}` |
| iteratee | `{Async Function}` |
```js
import asyncParallel from '@mjyocca/async-parallel-limit';
// Process 20 total async tasks with a limit of 5 at time
await asyncParallel(20, 5, async (n, next) => {
// processing
next();
})
```
### Module Support
#### ESM
```js
import asyncTimesLimit from '@mjyocca/async-parallel-limit';
```
#### CommonJs
```js
const asyncTimesLimit = require('@mjyocca/async-parallel-limit');
```
### Example 1
```js
import asyncTimesLimit from '@mjyocca/async-parallel-limit'
(async () => {
// array of objects
const dataToProcess = getData();
// will process the entire collection limiting only to running 10 in parallel
// once each promise resolves, the next promise is added to the queue
const apiProcessedIds = await asyncTimesLimit(
dataToProcess,
10,
// async callback function to process the data
async (n, data, next) => {
const apiRes = await getFromAPI(data);
// call next to resolve async task
// and can pass data to collect once all promises resolve
next(apiRes.id);
}
)
// Array of Id's [,,,,]
console.log(apiProcessedIds)
})();
```
### Example 2
```js
import asyncTimesLimit from '@mjyocca/async-parallel-limit'
(async () => {
// Will process 50 times with a max of 10 concurrently/parallel
const apiProcessedIds = await asyncTimesLimit(50, 10,
async (n, next) => {
const apiRes = await getFromAPI(data);
// call next to resolve async task
// and can pass data to collect once all promises resolve
next(apiRes.id);
}
)
// Array of Id's [,,,,]
console.log(apiProcessedIds)
})();
```