Middle
//Realizējiet funkciju // promiseAllLimit(tasks: Array<() => Promise<unknown>>, limit: number): Promise<any[]>, //kas izpilda solījumus ar maksimālā vienlaicīgu pieprasījumu skaita ierobežojumu.
sobes.tech AI
Atbilde no AI
Funkcija promiseAllLimit ļauj palaist uzdevumus (funkcijas, kas atgriež promisas) ar ierobežot to skaitu vienlaicīgi izpildāmos promisas. Tas ir noderīgi, piemēram, lai neapgrūtinātu tīklu vai API.
Implementācijas piemērs:
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();
});
}
Šeit mēs sākam līdz limit uzdevumu vienlaicīgi, un pēc katra pabeigšanas sākam nākamo, līdz visi ir pabeigti. Rezultāti tiek saglabāti masīvā pēc sākotnējās uzdevumu kārtības.