Рубрики
Без рубрики

Ограничение количества обещаний, работающих одновременно

Как выполнить запросы параллельно, но ограничивая число одновременных исполнений.

Автор оригинала: Gwenael Pluchon.

Как

Вы можете легко решить эту проблему, используя ES6 Promise Pool Отказ Вот основной пример:

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);

Этот пример запросит http://my-api.com/1 , http://my-api.com/2 и так далее, пока http://my-api.com/100 ограничивая количество параллельно до 3.

Работает с использованием функции продюсера обещания ( PersonateCroducer ). Эта функция будет называться PROMISEPOOOL и должна возвращать обещание каждый раз, если он не возвращается null который останавливает логику поколения обещания. PROMISEPOOL соберет все обещания, которые у него есть и выполнили их ограничения параллельных звонков.