mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-12 23:32:55 +01:00
Initial commit
Co-Authored-By: Eric Tuvesson <eric.tuvesson@gmail.com> Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com> Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com> Co-Authored-By: Anders Larsson <64838990+anders-topp@users.noreply.github.com> Co-Authored-By: Johan <4934465+joolsus@users.noreply.github.com> Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com> Co-Authored-By: victoratndl <99176179+victoratndl@users.noreply.github.com>
This commit is contained in:
20
packages/noodl-runtime/src/async-pool.js
Normal file
20
packages/noodl-runtime/src/async-pool.js
Normal file
@@ -0,0 +1,20 @@
|
||||
async function asyncPool(poolLimit, values, iteratorFn) {
|
||||
const ret = [];
|
||||
const executing = [];
|
||||
for (const item of values) {
|
||||
const p = Promise.resolve().then(() => iteratorFn(item, values));
|
||||
ret.push(p);
|
||||
|
||||
if (poolLimit <= values.length) {
|
||||
const e = p.then(() => executing.splice(executing.indexOf(e), 1));
|
||||
executing.push(e);
|
||||
if (executing.length >= poolLimit) {
|
||||
await Promise.race(executing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Promise.all(ret);
|
||||
}
|
||||
|
||||
module.exports = asyncPool;
|
||||
Reference in New Issue
Block a user