Limiting the number of promises running concurrently
How-to
You can solve this problem easily using ES6 Promise Pool. Here is a basic example :
var maxParallelRequests = 3;
var count = 0;
var total = 100;
var promiseProducer = function () {
  if (count < total) {
    count++;
    promise = getResultsAsync(`http://my-api.com/${count}`);
    return promise;
  } else {
    return null;
  }
};
var pool = new PromisePool(promiseProducer, maxParallelRequests);
This example will request http://my-api.com/1, http://my-api.com/2, and so on, until http://my-api.com/100, limiting the number of parallel to 3.
It works by using a promise producer function (promiseProducer). This function will be called by PromisePool and should returns a Promise each time, unless it returns null which stops the Promise generation logic. PromisePool will gather all the Promises it has, and execute them limiting parallel calls.

