Автор оригинала: 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 соберет все обещания, которые у него есть и выполнили их ограничения параллельных звонков.