Sobes.tech
Middle+

Tarefa prática: implemente uma função que aceite um array de URLs e um limite de requisições simultâneas, e execute fetch com limitação de execução paralela (não mais do que limit requisições ao mesmo tempo), retornando os resultados na ordem original.

sobes.tech IA

Resposta da IA

Para resolver o problema com a restrição no número de pedidos fetch simultâneos, pode usar uma fila e controlar o número de promessas ativas. Aqui está um exemplo de implementação em JavaScript usando 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()) // ou res.json() dependendo da tarefa
          .then(data => {
            results[index] = data;
          })
          .catch(err => {
            results[index] = err;
          })
          .finally(() => {
            activeCount--;
            next();
          });
      }
    }

    next();
  });
}

Neste código, não lançamos mais de limit pedidos ao mesmo tempo, e após cada um ser concluído, iniciamos o próximo na fila. Os resultados são armazenados no array results na ordem original.