mirror of
https://gitlab.com/mfocko/LeetCode.git
synced 2024-11-09 15:59:06 +01:00
39 lines
891 B
JavaScript
39 lines
891 B
JavaScript
|
/**
|
||
|
* @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
|
||
|
*/
|