typestar

Limitar la concurrencia en JavaScript

Un pool de trabajadores que toma tareas de una cola compartida.

async function mapLimit(items, limit, worker) {
  const results = new Array(items.length);
  let next = 0;

  async function run() {
    while (next < items.length) {
      const index = next;
      next += 1;
      results[index] = await worker(items[index], index);
    }
  }

  await Promise.all(Array.from({ length: limit }, run));
  return results;
}

async function main() {
  const doubled = await mapLimit([1, 2, 3, 4, 5], 2, async (n) => {
    await new Promise((resolve) => setTimeout(resolve, 5));
    return n * 2;
  });
  console.log(doubled);
}

main();

Cómo funciona

  1. Cada trabajador itera hasta vaciar la cola.
  2. El límite es cuántos trabajadores arrancas.
  3. Los resultados vuelven por índice, así se preserva el orden.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
25
Caracteres a escribir
515
Tokens
160
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 87 segundos.

Escribe este fragmento

Paso 2 de 4 en Cancelar y limitar; paso 16 de 19 en Promesas y async.

← Anterior Siguiente →