Open2
[Node.js]おすすめライブラリ
export async function concurrencyPromiseAll(_promiseArray: Promise<unknown>[], _maxConcurrency = 10) {
const maxConcurrency = _maxConcurrency;
const concurrency = _promiseArray.length < maxConcurrency ? _promiseArray.length : maxConcurrency;
const finalIndex = _promiseArray.length - 1;
const promises = [];
for (let i = 0; i < concurrency; i++) {
const p = new Promise((resolve) => {
const resultArray: unknown[] = [];
// eslint-disable-next-line @typescript-eslint/no-floating-promises
(async function loop(index) {
if (index <= finalIndex) {
resultArray.push(await _promiseArray[index]);
// eslint-disable-next-line @typescript-eslint/no-floating-promises
loop(index + concurrency);
return;
}
resolve(resultArray);
})(i);
});
promises.push(p);
}
return Promise.all(promises).then((values) => values.flat());
}