Я предлагаю асинхронный пул библиотеки: https://описание github.com/rxaviers/async-pool
npm install tiny-async-pool
:
Выполнение несколько возврат обещания & асинхронные функции с ограниченным параллелизмом с помощью собственного ES6/ES7
asyncPool выполняют несколько возврат обещания & асинхронные функции в ограниченном пуле параллелизма. Это отклоняет сразу, как только одно из обещаний отклоняет. Это разрешает, когда все обещания завершаются. Это вызывает функцию итератора как можно скорее (под пределом параллелизма).
Использование:
const timeout = i => new Promise(resolve => setTimeout(() => resolve(i), i));
await asyncPool(2, [1000, 5000, 3000, 2000], timeout);
// Call iterator (i = 1000)
// Call iterator (i = 5000)
// Pool limit of 2 reached, wait for the quicker one to complete...
// 1000 finishes
// Call iterator (i = 3000)
// Pool limit of 2 reached, wait for the quicker one to complete...
// 3000 finishes
// Call iterator (i = 2000)
// Itaration is complete, wait until running ones complete...
// 5000 finishes
// 2000 finishes
// Resolves, results are passed in given array order `[1000, 5000, 3000, 2000]`.