Middle+
Amaliy vazifa: URL massivini va bir vaqtning o'zida bajariladigan so'rovlar limitini qabul qiladigan va parallel bajarilishini cheklovchi fetch so'rovlarini bajaradigan funktsiya yozing (bir vaqtning o'zida limitdan ortiq so'rovlar bo'lmasligi kerak), natijalarni asl tartibda qaytaradi.
sobes.tech AI
AIdan javob
Bir vaqtning o'zida bajariladigan fetch so'rovlar sonini cheklash muammosini hal qilish uchun navbatdan foydalanish va faol va'dalarni sonini nazorat qilish mumkin. Quyida async/await bilan JavaScriptda amalga oshirish misoli keltirilgan:
async function limitedFetch(urls, limit) {
const results = new Array(urls.length);
let activeCount = 0;
let currentIndex = 0;
return new Promise((resolve, reject) => {
function next() {
if (currentIndex === urls.length && activeCount === 0) {
resolve(results);
return;
}
while (activeCount < limit && currentIndex < urls.length) {
const index = currentIndex++;
activeCount++;
fetch(urls[index])
.then(res => res.text()) // yoki res.json() vazifaga qarab
.then(data => {
results[index] = data;
})
.catch(err => {
results[index] = err;
})
.finally(() => {
activeCount--;
next();
});
}
}
next();
});
}
Ushbu kodda, bir vaqtning o'zida limit dan ortiq so'rovlar yuborilmaydi va har bir tugaganidan so'ng, navbatdagi so'rov boshlanadi. Natijalar results massivida asl tartibda saqlanadi.