Security News
JSR Working Group Kicks Off with Ambitious Roadmap and Plans for Open Governance
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
Run promise-returning & async functions concurrently with optional limited concurrency
The p-all package is a utility module for running multiple promise-returning & async functions with limited concurrency, aggregating the results. It is useful for controlling the execution of a large number of asynchronous operations to ensure that system resources are managed properly.
Running multiple promises with limited concurrency
This feature allows you to run multiple promises with a specified concurrency limit. In the code sample, three tasks are executed with a concurrency limit of 2, meaning only two promises will be running at the same time.
const pAll = require('p-all');
const tasks = [
() => Promise.resolve('Task 1'),
() => Promise.resolve('Task 2'),
() => Promise.resolve('Task 3')
];
pAll(tasks, { concurrency: 2 }).then(results => {
console.log(results); // ['Task 1', 'Task 2', 'Task 3']
});
Bluebird is a comprehensive promise library with a wide range of features including concurrency control. It offers similar functionality through its 'Promise.map' method with a 'concurrency' option. Bluebird is known for its performance and additional utilities for promise manipulation.
The async library provides a collection of asynchronous utilities. Its 'parallelLimit' function can be used to achieve similar concurrency control as p-all. Async is not promise-based by default but supports promises and also provides other flow control utilities.
p-limit is a package that limits the number of concurrent promise executions, similar to p-all. The difference is that p-limit provides a lower-level API where you create a limiter function and then apply it to individual promises, whereas p-all takes an array of promise-returning functions.
p-queue is a promise queue with adjustable concurrency that can be paused, resumed, and cleared. It is more feature-rich than p-all, providing a queue interface with more control over the execution of tasks, including dynamic prioritization and task cancellation.
Run promise-returning & async functions concurrently with optional limited concurrency
Similar to Promise.all()
, but accepts functions instead of promises directly so you can limit the concurrency.
If you're doing the same work in each function, use p-map
instead.
See p-series
for a serial counterpart.
$ npm install p-all
import pAll from 'p-all';
import got from 'got';
const actions = [
() => got('https://sindresorhus.com'),
() => got('https://avajs.dev'),
() => checkSomething(),
() => doSomethingElse()
];
console.log(await pAll(actions, {concurrency: 2}));
Returns a Promise
that is fulfilled when all promises returned from calling the functions in tasks
are fulfilled, or rejects if any of the promises reject. The fulfilled value is an Array
of the fulfilled values in tasks
order.
Type: Iterable<Function>
Iterable with promise-returning/async functions.
Type: object
Type: number
Default: Infinity
Minimum: 1
Number of concurrent pending promises.
Type: boolean
Default: true
When set to false
, instead of stopping when a promise rejects, it will wait for all the promises to settle and then reject with an aggregated error containing all the errors from the rejected promises.
FAQs
Run promise-returning & async functions concurrently with optional limited concurrency
The npm package p-all receives a total of 1,203,002 weekly downloads. As such, p-all popularity was classified as popular.
We found that p-all 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
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
Security News
Research
An advanced npm supply chain attack is leveraging Ethereum smart contracts for decentralized, persistent malware control, evading traditional defenses.
Security News
Research
Attackers are impersonating Sindre Sorhus on npm with a fake 'chalk-node' package containing a malicious backdoor to compromise developers' projects.