Sobes.tech
Middle+

Praktisks uzdevums: izstrādājiet funkciju, kas pieņem URL masīvu un vienlaicīgu pieprasījumu limitu, un veic fetch pieprasījumus ar paralēlas izpildes ierobežojumu (ne vairāk kā limit pieprasījumu vienlaikus), atgriežot rezultātus sākotnējā secībā.

sobes.tech AI

Atbilde no AI

Lai risinātu uzdevumu ar ierobežojumu, cik daudz vienlaikus var veikt fetch pieprasījumus, var izmantot rindu un kontrolēt aktīvo solījumu skaitu. Zemāk ir piemērs JavaScript, izmantojot 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()) // vai res.json() atkarībā no uzdevuma
          .then(data => {
            results[index] = data;
          })
          .catch(err => {
            results[index] = err;
          })
          .finally(() => {
            activeCount--;
            next();
          });
      }
    }

    next();
  });
}

Šajā kodā mēs neuzsākam vairāk nekā limit pieprasījumus vienlaikus, un pēc katra pabeigšanas uzsākam nākamo no rindas. Rezultāti tiek saglabāti results masīvā sākotnējā secībā.