Sobes.tech
Middle+

Практиական խնդիր՝ ստեղծել ֆունկցիա, որը ընդունում է URL-ների զանգված և միաժամանակյա հարցումների սահմանափակում, և իրականացնում է fetch-հարցումներ՝ սահմանափակելով պառլելային կատարմանը (ոչ ավելի, քան limit հարցումներ միաժամանակ), վերադարձնելով արդյունքները սկզբնական կարգով։

sobes.tech AI

Պատասխան AI-ից

Որպես լուծում միաժամանակյա fetch հարցումների քանակի սահմանափակման խնդրին, կարելի է օգտագործել հերթ և վերահսկել ակտիվ խոստումների քանակը: Ստորև ներկայացված է JavaScript-ով 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()) // կամ res.json() ըստ առաջադրանքի
          .then(data => {
            results[index] = data;
          })
          .catch(err => {
            results[index] = err;
          })
          .finally(() => {
            activeCount--;
            next();
          });
      }
    }

    next();
  });
}

Այս կոդում, մենք չսկսենք ավելի քան limit հարցում միաժամանակ, և յուրաքանչյուր ավարտից հետո սկսում ենք հաջորդը հերթից: Ներգրավված արդյունքները պահվում են results զանգվածում սկզբնական կարգով։