problems(js): add “2636. Promise Pool”

Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2023-05-18 20:20:38 +02:00
parent dbf39a2ad0
commit 4bb6d712e2
Signed by: mfocko
GPG key ID: 7C47D46246790496

38
problems/promise-pool.js Normal file
View file

@ -0,0 +1,38 @@
/**
* @param {Function[]} functions
* @param {number} n
* @return {Function}
*/
var promisePool = async function(functions, n) {
return new Promise((resolve, reject) => {
let in_progress = 0;
let next = 0;
function progress() {
if (next >= functions.length) {
if (in_progress == 0) {
resolve();
}
return;
}
while (in_progress < n && next < functions.length) {
in_progress++;
functions[next++]().then(() => {
in_progress--;
progress();
});
}
}
progress();
});
};
/**
* const sleep = (t) => new Promise(res => setTimeout(res, t));
* promisePool([() => sleep(500), () => sleep(400)], 1)
* .then(console.log) // After 900ms
*/