Bird
Raised Fist0
Node.jsframework~10 mins

Promise catch for async errors in Node.js - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to catch errors from the promise.

Node.js
fetchData().then(data => console.log(data)).[1](error => console.error(error));
Drag options to blanks, or click blank then click option'
Aresolve
Bthen
Cfinally
Dcatch
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'then' instead of 'catch' to handle errors.
Using 'finally' to catch errors (it runs regardless of success or failure).
2fill in blank
medium

Complete the code to handle errors using async/await with try/catch.

Node.js
async function load() {
  try {
    const data = await fetchData();
    console.log(data);
  } catch ([1]) {
    console.error(error);
  }
}
Drag options to blanks, or click blank then click option'
Aerror
Bdata
Cresult
Dresponse
Attempts:
3 left
💡 Hint
Common Mistakes
Using a variable name that does not represent an error.
Leaving the catch parameter empty.
3fill in blank
hard

Fix the error in the promise chain to properly catch errors.

Node.js
fetchData()
  .then(data => console.log(data))
  .[1](error => console.log('Error:', error));
Drag options to blanks, or click blank then click option'
Athen
Bcatch
Cerror
Dfinally
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'then' to catch errors causes errors to be unhandled.
Using 'error' as a method name causes syntax errors.
4fill in blank
hard

Fill both blanks to handle errors and always run cleanup code.

Node.js
fetchData()
  .then(data => console.log(data))
  .[1](error => console.error(error))
  .[2](() => console.log('Cleanup done'));
Drag options to blanks, or click blank then click option'
Acatch
Bthen
Cfinally
Dresolve
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'then' instead of 'catch' for errors.
Not using 'finally' for cleanup.
5fill in blank
hard

Fill all three blanks to create a promise chain that logs data, catches errors, and always logs completion.

Node.js
fetchData()
  .[1](data => console.log(data))
  .[2](error => console.error('Error:', error))
  .[3](() => console.log('Done'));
Drag options to blanks, or click blank then click option'
Athen
Bcatch
Cfinally
Dresolve
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up the order of then, catch, and finally.
Using 'resolve' which is not a method on promises.

Practice

(1/5)
1. What is the main purpose of using catch with a Promise in Node.js?
easy
A. To log the successful result of the Promise
B. To start the asynchronous operation
C. To handle errors that occur during the asynchronous operation
D. To convert a Promise into a synchronous function

Solution

  1. Step 1: Understand what catch does in Promises

    The catch method is designed to handle any errors that happen during the execution of a Promise or in the chain of Promises.
  2. Step 2: Identify the role of catch in error handling

    It catches rejected Promises or exceptions thrown inside then callbacks, preventing unhandled errors.
  3. Final Answer:

    To handle errors that occur during the asynchronous operation -> Option C
  4. Quick Check:

    Promise catch = error handler [OK]
Hint: Remember: catch always handles errors in promises [OK]
Common Mistakes:
  • Thinking catch starts the async operation
  • Confusing catch with success handlers
  • Believing catch makes code synchronous
2. Which of the following is the correct syntax to catch errors from a Promise named myPromise?
easy
A. myPromise.error(error => console.log(error));
B. myPromise.catch(error => console.log(error));
C. myPromise.then(error => console.log(error));
D. myPromise.finally(error => console.log(error));

Solution

  1. Step 1: Recall the Promise error handling syntax

    The correct method to handle errors in a Promise is catch, which takes a callback for the error.
  2. Step 2: Match the syntax with the options

    myPromise.catch(error => console.log(error)); uses catch correctly with an arrow function to log the error.
  3. Final Answer:

    myPromise.catch(error => console.log(error)); -> Option B
  4. Quick Check:

    Use catch for errors in Promises [OK]
Hint: Use .catch() after Promise to handle errors [OK]
Common Mistakes:
  • Using then to catch errors
  • Using non-existent error method
  • Confusing finally with error handling
3. What will be logged to the console when running this code?
Promise.reject('Error happened')
  .catch(err => console.log('Caught:', err));
medium
A. Caught: Error happened
B. Error happened
C. Uncaught Error happened
D. Nothing is logged

Solution

  1. Step 1: Understand Promise.reject and catch

    Promise.reject('Error happened') creates a rejected Promise with the error message 'Error happened'.
  2. Step 2: Analyze the catch callback

    The catch method receives the error and logs it prefixed with 'Caught:'.
  3. Final Answer:

    Caught: Error happened -> Option A
  4. Quick Check:

    Rejected Promise caught logs error [OK]
Hint: Rejected Promise triggers catch callback [OK]
Common Mistakes:
  • Expecting error to be logged without 'Caught:' prefix
  • Thinking error is uncaught and crashes program
  • Assuming nothing logs because of rejection
4. Identify the error in this code snippet that tries to catch a Promise rejection:
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(console.error());
medium
A. The response.json() call should be inside catch
B. The then methods are missing error handlers
C. The fetch function does not return a Promise
D. The catch method is called with the result of console.error() instead of a function

Solution

  1. Step 1: Check how catch is used

    The code calls console.error() immediately and passes its result (undefined) to catch, which expects a function.
  2. Step 2: Understand correct catch usage

    catch should receive a function reference or arrow function, like catch(error => console.error(error)).
  3. Final Answer:

    The catch method is called with the result of console.error() instead of a function -> Option D
  4. Quick Check:

    Pass function to catch, not call it [OK]
Hint: Pass function to catch, don't call it immediately [OK]
Common Mistakes:
  • Calling console.error() inside catch instead of passing function
  • Ignoring that fetch returns a Promise
  • Misplacing response.json() call
5. Given this code, what will be the output and why?
async function getData() {
  return Promise.reject('Failed to load');
}

getData()
  .then(data => console.log('Data:', data))
  .catch(err => {
    console.log('Error caught:', err);
    return 'Default data';
  })
  .then(result => console.log('Result:', result));
hard
A. Error caught: Failed to load\nResult: Default data
B. Data: Failed to load\nResult: undefined
C. Uncaught Failed to load error, program crashes
D. Only Error caught: Failed to load is logged

Solution

  1. Step 1: Analyze the rejected Promise from getData

    The function returns a rejected Promise with message 'Failed to load', so the first then is skipped and control goes to catch.
  2. Step 2: Understand the catch and subsequent then

    The catch logs the error and returns 'Default data', which resolves the Promise chain. The next then receives this value and logs it.
  3. Final Answer:

    Error caught: Failed to load Result: Default data -> Option A
  4. Quick Check:

    catch handles error and returns value for next then [OK]
Hint: Returned value from catch goes to next then [OK]
Common Mistakes:
  • Thinking error stops the chain completely
  • Expecting no output after catch
  • Confusing rejected Promise with resolved data