Middle
//Įgyvendinkite funkciją // promiseAllLimit(tasks: Array<() => Promise<unknown>>, limit: number): Promise<any[]>, //kuri vykdo pažadus su maksimalios vienu metu užklausų skaičiaus apribojimu.
sobes.tech AI
Atsakymas iš AI
Funkcija promiseAllLimit leidžia vykdyti užduotis (funkcijas, kurios grąžina pažadus) su apribojimu, kiek pažadų gali būti vykdomi vienu metu. Tai naudinga, pavyzdžiui, siekiant neperkrauti tinklo ar API.
Implementacijos pavyzdys:
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();
});
}
Čia pradedame iki limit užduočių vienu metu, ir po kiekvieno jų užbaigimo pradedame kitą, kol visos bus apdorotos. Rezultatai saugomi masyve pagal pradinės užduoties eilės tvarką.