102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# p-limit
 | 
						|
 | 
						|
> Run multiple promise-returning & async functions with limited concurrency
 | 
						|
 | 
						|
## Install
 | 
						|
 | 
						|
```
 | 
						|
$ npm install p-limit
 | 
						|
```
 | 
						|
 | 
						|
## Usage
 | 
						|
 | 
						|
```js
 | 
						|
const pLimit = require('p-limit');
 | 
						|
 | 
						|
const limit = pLimit(1);
 | 
						|
 | 
						|
const input = [
 | 
						|
	limit(() => fetchSomething('foo')),
 | 
						|
	limit(() => fetchSomething('bar')),
 | 
						|
	limit(() => doSomething())
 | 
						|
];
 | 
						|
 | 
						|
(async () => {
 | 
						|
	// Only one promise is run at once
 | 
						|
	const result = await Promise.all(input);
 | 
						|
	console.log(result);
 | 
						|
})();
 | 
						|
```
 | 
						|
 | 
						|
## API
 | 
						|
 | 
						|
### pLimit(concurrency)
 | 
						|
 | 
						|
Returns a `limit` function.
 | 
						|
 | 
						|
#### concurrency
 | 
						|
 | 
						|
Type: `number`\
 | 
						|
Minimum: `1`\
 | 
						|
Default: `Infinity`
 | 
						|
 | 
						|
Concurrency limit.
 | 
						|
 | 
						|
### limit(fn, ...args)
 | 
						|
 | 
						|
Returns the promise returned by calling `fn(...args)`.
 | 
						|
 | 
						|
#### fn
 | 
						|
 | 
						|
Type: `Function`
 | 
						|
 | 
						|
Promise-returning/async function.
 | 
						|
 | 
						|
#### args
 | 
						|
 | 
						|
Any arguments to pass through to `fn`.
 | 
						|
 | 
						|
Support for passing arguments on to the `fn` is provided in order to be able to avoid creating unnecessary closures. You probably don't need this optimization unless you're pushing a *lot* of functions.
 | 
						|
 | 
						|
### limit.activeCount
 | 
						|
 | 
						|
The number of promises that are currently running.
 | 
						|
 | 
						|
### limit.pendingCount
 | 
						|
 | 
						|
The number of promises that are waiting to run (i.e. their internal `fn` was not called yet).
 | 
						|
 | 
						|
### limit.clearQueue()
 | 
						|
 | 
						|
Discard pending promises that are waiting to run.
 | 
						|
 | 
						|
This might be useful if you want to teardown the queue at the end of your program's lifecycle or discard any function calls referencing an intermediary state of your app.
 | 
						|
 | 
						|
Note: This does not cancel promises that are already running.
 | 
						|
 | 
						|
## FAQ
 | 
						|
 | 
						|
### How is this different from the [`p-queue`](https://github.com/sindresorhus/p-queue) package?
 | 
						|
 | 
						|
This package is only about limiting the number of concurrent executions, while `p-queue` is a fully featured queue implementation with lots of different options, introspection, and ability to pause the queue.
 | 
						|
 | 
						|
## Related
 | 
						|
 | 
						|
- [p-queue](https://github.com/sindresorhus/p-queue) - Promise queue with concurrency control
 | 
						|
- [p-throttle](https://github.com/sindresorhus/p-throttle) - Throttle promise-returning & async functions
 | 
						|
- [p-debounce](https://github.com/sindresorhus/p-debounce) - Debounce promise-returning & async functions
 | 
						|
- [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning & async functions concurrently with optional limited concurrency
 | 
						|
- [More…](https://github.com/sindresorhus/promise-fun)
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
<div align="center">
 | 
						|
	<b>
 | 
						|
		<a href="https://tidelift.com/subscription/pkg/npm-p-limit?utm_source=npm-p-limit&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
 | 
						|
	</b>
 | 
						|
	<br>
 | 
						|
	<sub>
 | 
						|
		Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
 | 
						|
	</sub>
 | 
						|
</div>
 |