Как ограничить максимальное количество параллельных запросов?
Работает!!!!)) 
Пришлось писать свой Promise.race, который возвращает индекс решенного промиса в массиве.
В конструктор передается лимит одновременных запросов, который не будет превышать функция. Функция делает сразу N запросов, где N это лимит, как только разрешается один промис делается еще один запрос.  const promiseRace = promises => (
  new Promise((fulfil, reject) => {
    promises.forEach((promise, index) => {
      promise.then(data => fulfil({ data, index }), reject);
    });
  })
);

class Fetcher {
  constructor(maxConnections = 20) {
    this.maxConnections = maxConnections;
  }

  async request(urls, options = {}) {
    const responsePromises = [];

    for (const url of urls) {
      if (responsePromises.length >= this.maxConnections) {
        const { data: response, index } = await promiseRace(responsePromises);
        responsePromises.splice(index, 1);
      }
      responsePromises.push(fetch(url, options));
    }

    return Promise.all(responsePromises);
  }
}

// test
(async () => {
  try {
    const fetcher = new Fetcher(2); // лимит 2
    const urls = [];

    for (let i = 0; i < 200; i++) {
      urls.push(`/api/user/${i}`);
    }

    const responses = await fetcher.request(urls);
    console.log('end');
  } catch (e) {
    console.error(e);
  }
})();
Если скрипт запускается в одном экземпляре то просто каунтер в памяти