Promise.all(), Promise.race(), and Promise.any()
What advanced promise pattern is implemented?
function concurrent(tasks, limit) {
const results = new Array(tasks.length);
let running = 0;
let index = 0;
return new Promise((resolve, reject) => {
function next() {
if (index === tasks.length && running === 0) {
resolve(results);
return;
}
while (running < limit && index < tasks.length) {
const i = index++;
running++;
Promise.resolve(tasks[i]())
.then(result => {
results[i] = result;
running--;
next();
})
.catch(reject);
}
}
next();
});
}