Back to results for “Async”
Node.js › Async Patterns

What is the difference between running async operations sequentially with multiple awaits versus concurrently with Promise.all()?

Intermediate

Answer

Writing 'const a = await taskA(); const b = await taskB();' runs the two tasks sequentially -- taskB doesn't even start until taskA fully completes, wasting time when the tasks are independent. Starting both promises first (without awaiting immediately) and then awaiting them together via Promise.all() lets both operations run concurrently, since they're both already in flight by the time either await actually pauses execution, meaningfully reducing total wait time for independent I/O-bound operations.
// Sequential: total time = taskA time + taskB time
const a = await taskA();
const b = await taskB();

// Concurrent: total time = max(taskA time, taskB time)
const [a2, b2] = await Promise.all([taskA(), taskB()]);
Real-world example A page-load handler fetching a user's profile, recent orders, and notification count from three independent database queries switches from three sequential awaits to a single Promise.all(), cutting the endpoint's response time roughly to the duration of the single slowest query instead of the sum of all three.

Common follow-ups: In what specific scenario is sequential awaiting actually the correct choice rather than a mistake?;How does this concurrency differ from true parallelism, given Node.js still runs on a single main thread?