← Back to Home

How to Run Concurrency-limited Promise Queues for TTS Generation

Updated March 5, 2026
concurrencypromise queuettsrate limitingalgorithm

Concurrency-limited Queue Pattern

When generating per-slide audio, run tasks in parallel but cap active requests by model rate limits.

Dynamic Concurrency

Queue Pattern

const queue: Promise<void>[] = [];

for (; currentIndex < Math.min(CONCURRENCY, slides.length); currentIndex++) {
  queue.push(processSlide(currentIndex));
}

while (currentIndex < slides.length) {
  const finished = await Promise.race(queue);
  const i = queue.indexOf(finished);
  if (i !== -1) queue.splice(i, 1);
  queue.push(processSlide(currentIndex++));
}

await Promise.all(queue);

Error Handling Model

This gives maximum throughput without losing already-completed work.