Call an array of promise-returning functions, restricting concurrency to a specified limit.
const promiseCallLimit = require('promise-call-limit')
const things = getLongListOfThingsToFrobulate()
// frobulate no more than 4 things in parallel
promiseCallLimit(things.map(thing => () => frobulateThing(thing)), 4)
.then(results => console.log('frobulated 4 at a time', results))
The default limit is the number of CPUs on the system - 1, or 1.
The reason for subtracting one is that presumably the main thread is taking up a CPU as well, so let's not be greedy.
Note that the array should be a list of Promise-returning functions, not
Promises themselves. If you have a bunch of Promises already, you're best
off just calling Promise.all()
.
The functions in the queue are called without any arguments.