mirror of
https://gitee.com/myxzgzs/boyue_jnpf.git
synced 2025-08-08 15:22:43 +08:00
18 lines
474 B
JavaScript
18 lines
474 B
JavaScript
async function asyncPool(poolLimit, iterable, iteratorFn) {
|
|
const ret = [];
|
|
const executing = new Set();
|
|
for (const item of iterable) {
|
|
const p = Promise.resolve().then(() => iteratorFn(item, iterable));
|
|
ret.push(p);
|
|
executing.add(p);
|
|
const clean = () => executing.delete(p);
|
|
p.then(clean).catch(clean);
|
|
if (executing.size >= poolLimit) {
|
|
await Promise.race(executing);
|
|
}
|
|
}
|
|
return Promise.all(ret);
|
|
}
|
|
|
|
module.exports = asyncPool;
|