Sobes.tech
Middle+

Praktinė užduotis: įgyvendinkite funkciją, kuri priima URL masyvą ir vienu metu vykdomų užklausų limitą, ir vykdo fetch užklausas su paralelinio vykdymo apribojimu (ne daugiau kaip limit užklausų vienu metu), grąžindama rezultatus pradinėje tvarkoje.

sobes.tech AI

Atsakymas iš AI

Sprendžiant užduotį su apribojimu, kiek vienu metu gali būti vykdomi fetch užklausos, galima naudoti eilę ir kontroliuoti aktyvių pažadų skaičių. Žemiau pateikiamas pavyzdys, kaip tai įgyvendinti JavaScript naudojant async/await:

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()) // arba res.json() priklausomai nuo užduoties
          .then(data => {
            results[index] = data;
          })
          .catch(err => {
            results[index] = err;
          })
          .finally(() => {
            activeCount--;
            next();
          });
      }
    }

    next();
  });
}

Šiame kode, mes neleidžiame pradėti daugiau nei limit užklausų vienu metu, ir po kiekvieno užbaigimo pradedame kitą iš eilės. Rezultatai saugomi results masyve pradinėje tvarkoje.