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