Middle
//Implementirajte funkciju // promiseAllLimit(tasks: Array<() => Promise<unknown>>, limit: number): Promise<any[]>, //која извршава обећања са ограничењем на максималан број истовремених захтева.
sobes.tech АИ
Одговор од АИ
Funkcija promiseAllLimit omogućava pokretanje zadataka (funkcija koje vraćaju obećanja) sa ograničenjem na broj istovremeno izvršavanih obećanja. Ovo je korisno, na primer, da se ne preoptereti mreža ili API.
Primer implementacije:
function promiseAllLimit(tasks, limit) {
return new Promise((resolve, reject) => {
const results = [];
let running = 0;
let index = 0;
let resolvedCount = 0;
function runNext() {
if (resolvedCount === tasks.length) {
resolve(results);
return;
}
while (running < limit && index < tasks.length) {
const currentIndex = index;
const task = tasks[currentIndex];
index++;
running++;
task()
.then(result => {
results[currentIndex] = result;
})
.catch(err => {
reject(err);
})
.finally(() => {
running--;
resolvedCount++;
runNext();
});
}
}
runNext();
});
}
Овде покрећемо до limit задатака истовремено, а након сваког завршетка покрећемо следећи, док не обрадимо све. Резултати се чувају у низу у реду оригиналних задатака.