Sobes.tech
Middle

//Implementa la función // promiseAllLimit(tasks: Array<() => Promise<unknown>>, limit: number): Promise<any[]>, //que ejecuta promesas con una restricción en el número máximo de solicitudes simultáneas.

sobes.tech AI

Respuesta de la IA

La función promiseAllLimit permite ejecutar tareas (funciones que devuelven promesas) con una restricción en la cantidad de promesas que se ejecutan simultáneamente. Esto es útil, por ejemplo, para no sobrecargar la red o la API.

Ejemplo de implementación:

function promiseAllLimit(tasks, limit) {
  return new Promise((resolve, reject) => {
    const results = [];
    let running = 0;
    let index = 0;
    let resolvedCount = 0;

    function runNext() {
      if (resolvedCount === tasks.length) {
        resolve(results);
        return;
      }

      while (running < limit && index < tasks.length) {
        const currentIndex = index;
        const task = tasks[currentIndex];
        index++;
        running++;

        task()
          .then(result => {
            results[currentIndex] = result;
          })
          .catch(err => {
            reject(err);
          })
          .finally(() => {
            running--;
            resolvedCount++;
            runNext();
          });
      }
    }

    runNext();
  });
}

Aquí, ejecutamos hasta limit tareas simultáneamente, y después de completar cada una, iniciamos la siguiente, hasta procesar todas. Los resultados se almacenan en un array en el orden original de las tareas.