Middle
//Vazifa bajaruvchi funksiyani amalga oshiring // promiseAllLimit(tasks: Array<() => Promise<unknown>>, limit: number): Promise<any[]>, //maksimal bir vaqtning o'zida so'rovlar sonini cheklash bilan promissalarni bajaradi.
sobes.tech AI
AIdan javob
promiseAllLimit funksiyasi, vazifalarni (promislar qaytaradigan funksiyalar) bir vaqtning o'zida bajariladigan promisslar sonini cheklash bilan bajarishga imkon beradi. Bu, masalan, tarmoq yoki API'ni haddan tashqari yuklamaslik uchun foydalidir.
Misol uchun, quyidagicha amalga oshiriladi:
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();
});
}
Bu yerda, biz bir vaqtning o'zida limit ta vazifani boshlaymiz va har bir tugagach, keyingisini boshlaymiz, shunda barcha vazifalar bajarilguncha davom etadi. Natijalar boshlang'ich vazifalar tartibida massivga saqlanadi.