Bird
Raised Fist0
Node.jsframework~5 mins

Promise.all for parallel execution in Node.js - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What does Promise.all do in JavaScript?

Promise.all runs multiple promises at the same time and waits for all of them to finish. It returns a new promise that resolves with an array of results when all promises succeed, or rejects if any promise fails.

Click to reveal answer
beginner
How does Promise.all handle errors from promises?

If any promise inside Promise.all rejects (fails), the whole Promise.all promise immediately rejects with that error. It stops waiting for other promises.

Click to reveal answer
beginner
Why use Promise.all instead of awaiting promises one by one?

Using Promise.all runs promises in parallel, so tasks happen at the same time. Awaiting one by one runs them in order, which is slower.

Click to reveal answer
beginner
What is the output of Promise.all([Promise.resolve(1), Promise.resolve(2)])?

The output is a promise that resolves to [1, 2], an array of the resolved values from each promise.

Click to reveal answer
intermediate
Can Promise.all be used with non-promise values?

Yes. Non-promise values are treated as resolved promises immediately. So Promise.all([1, Promise.resolve(2)]) resolves to [1, 2].

Click to reveal answer
What happens if one promise in Promise.all rejects?
AThe entire <code>Promise.all</code> rejects immediately.
BIt waits for all promises to finish before rejecting.
CIt ignores the rejected promise and resolves with others.
DIt retries the rejected promise automatically.
Which is faster when running multiple independent promises?
AUsing <code>Promise.all</code> to run them in parallel.
BRunning promises inside a loop with await.
CAwaiting each promise one by one.
DRunning promises synchronously without promises.
What does Promise.all([]) resolve to?
AA promise that never resolves.
BAn empty array <code>[]</code> immediately.
CAn error because the array is empty.
DUndefined.
Can Promise.all accept a mix of promises and values?
AOnly if values are strings.
BNo, all items must be promises.
COnly if values are numbers.
DYes, values are treated as resolved promises.
What type of value does Promise.all return?
AAn array of promises.
BA boolean.
CA new promise.
DA string.
Explain how Promise.all helps run tasks in parallel and what happens if one task fails.
Think about waiting for all friends to finish a task together.
You got /3 concepts.
    Describe the difference between awaiting promises one by one versus using Promise.all.
    Compare waiting in line versus doing things together.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does Promise.all do in Node.js?
      easy
      A. Runs promises one after another in sequence
      B. Runs only the first promise and ignores others
      C. Runs multiple promises in parallel and waits for all to complete
      D. Runs promises but returns results in random order

      Solution

      1. Step 1: Understand Promise.all behavior

        Promise.all runs all promises at the same time (in parallel) and waits until all finish.
      2. Step 2: Check result order and completion

        It returns results in the order of the promises given, not random or sequentially one by one.
      3. Final Answer:

        Runs multiple promises in parallel and waits for all to complete -> Option C
      4. Quick Check:

        Promise.all = parallel run + wait all [OK]
      Hint: Promise.all runs all promises together, not one by one [OK]
      Common Mistakes:
      • Thinking Promise.all runs promises sequentially
      • Believing Promise.all returns results in random order
      • Assuming Promise.all ignores failed promises
      2. Which of the following is the correct syntax to use Promise.all with an array of promises named promises?
      easy
      A. Promise.all(promises).then(results => console.log(results));
      B. Promise.all.then(promises).catch(error => console.log(error));
      C. Promise.all(promises).catch(results => console.log(results));
      D. Promise.all(promises).finally(results => console.log(results));

      Solution

      1. Step 1: Check Promise.all usage

        Promise.all is called as a function with an array of promises as argument.
      2. Step 2: Verify chaining with then()

        To get results, use .then() after Promise.all to handle resolved values.
      3. Final Answer:

        Promise.all(promises).then(results => console.log(results)); -> Option A
      4. Quick Check:

        Correct syntax = Promise.all(array).then() [OK]
      Hint: Use Promise.all(array).then() to get results [OK]
      Common Mistakes:
      • Using Promise.all.then(promises) instead of Promise.all(promises).then()
      • Using catch() to handle results instead of errors
      • Using finally() to get results instead of then()
      3. What will be logged by this code?
      const p1 = Promise.resolve(1);
      const p2 = Promise.resolve(2);
      const p3 = Promise.resolve(3);
      
      Promise.all([p1, p2, p3]).then(results => console.log(results));
      medium
      A. Error: Promise rejected
      B. [1, 2, 3]
      C. [undefined, undefined, undefined]
      D. [3, 2, 1]

      Solution

      1. Step 1: Understand resolved promises

        p1, p2, p3 are promises resolved immediately with values 1, 2, and 3.
      2. Step 2: Promise.all returns array of results in input order

        Promise.all waits for all to resolve and returns results in the same order as input array.
      3. Final Answer:

        [1, 2, 3] -> Option B
      4. Quick Check:

        Promise.all results order = input order [OK]
      Hint: Promise.all returns results in same order as input promises [OK]
      Common Mistakes:
      • Assuming results order depends on resolution speed
      • Expecting reversed or random order
      • Thinking Promise.all returns undefined values
      4. Identify the error in this code snippet:
      const p1 = Promise.resolve('A');
      const p2 = Promise.reject('Error');
      
      Promise.all([p1, p2])
        .then(results => console.log('Results:', results))
        .catch(error => console.log('Caught:', error));
      medium
      A. The catch block will run with 'Error' because p2 rejects
      B. Promise.all will never reject even if one promise fails
      C. The then block will run with partial results
      D. Syntax error: Promise.reject cannot be used inside Promise.all

      Solution

      1. Step 1: Check behavior of Promise.all with rejected promises

        If any promise rejects, Promise.all immediately rejects with that error.
      2. Step 2: Analyze catch and then blocks

        Since p2 rejects, the catch block runs with the error message 'Error'. The then block does not run.
      3. Final Answer:

        The catch block will run with 'Error' because p2 rejects -> Option A
      4. Quick Check:

        Promise.all rejects if any promise rejects [OK]
      Hint: If one promise rejects, Promise.all rejects immediately [OK]
      Common Mistakes:
      • Thinking Promise.all ignores rejected promises
      • Expecting then block to run with partial results
      • Believing Promise.reject causes syntax error here
      5. You want to fetch data from three APIs in parallel and process all results only if all succeed. Which code correctly uses Promise.all to achieve this?
      const fetch1 = () => fetch('https://api1.example.com/data').then(res => res.json());
      const fetch2 = () => fetch('https://api2.example.com/data').then(res => res.json());
      const fetch3 = () => fetch('https://api3.example.com/data').then(res => res.json());
      
      // Which code snippet correctly waits for all fetches and handles errors?
      hard
      A. Promise.all([fetch1(), fetch2(), fetch3()]) .then(results => console.error('All data:', results)) .catch(error => console.log('Fetch failed:', error));
      B. Promise.all([fetch1, fetch2, fetch3]) .then(results => console.log('All data:', results)) .catch(error => console.error('Fetch failed:', error));
      C. Promise.all(fetch1, fetch2, fetch3) .then(results => console.log('All data:', results)) .catch(error => console.error('Fetch failed:', error));
      D. Promise.all([fetch1(), fetch2(), fetch3()]) .then(results => console.log('All data:', results)) .catch(error => console.error('Fetch failed:', error));

      Solution

      1. Step 1: Check how to call fetch functions

        fetch1, fetch2, fetch3 are functions returning promises, so call them with () to get promises.
      2. Step 2: Verify Promise.all usage and error handling

        Pass an array of promises to Promise.all, then use .then() to handle results and .catch() for errors.
      3. Final Answer:

        Promise.all([fetch1(), fetch2(), fetch3()]) .then(results => console.log('All data:', results)) .catch(error => console.error('Fetch failed:', error)); -> Option D
      4. Quick Check:

        Call functions to get promises, pass array to Promise.all [OK]
      Hint: Call functions to get promises before Promise.all [OK]
      Common Mistakes:
      • Passing functions instead of calling them
      • Passing multiple arguments instead of an array
      • Swapping console.log and console.error in then/catch