Error handling with async/await helps you catch problems in your code when waiting for tasks to finish. It keeps your program from crashing and lets you respond nicely to errors.
Error handling in async/await in Node.js
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Node.js
async function example() { try { const result = await someAsyncTask(); // use result } catch (error) { // handle error here } }
Use try to run code that might fail.
Use catch to handle any errors that happen inside try.
Examples
Node.js
async function fetchData() { try { const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data); } catch (error) { console.error('Failed to fetch data:', error); } }
Node.js
import fs from 'fs/promises'; async function readFile() { try { const content = await fs.readFile('file.txt', 'utf-8'); console.log(content); } catch (error) { console.error('Error reading file:', error); } }
Sample Program
This program tries to read a JSON config file. If the file is missing or has bad JSON, it catches the error and prints a friendly message.
Node.js
import fs from 'fs/promises'; async function readConfig() { try { const data = await fs.readFile('config.json', 'utf-8'); const config = JSON.parse(data); console.log('Config loaded:', config); } catch (error) { console.error('Could not load config:', error.message); } } readConfig();
Important Notes
Always use try/catch around await to catch errors.
You can also handle errors by returning promises and using .catch(), but try/catch is cleaner with async/await.
Remember to keep error messages clear to help debugging.
Summary
Use try/catch blocks to handle errors in async functions.
Put await calls inside try to catch failures.
Handling errors prevents crashes and helps your app respond smoothly.
Practice
1. What is the main purpose of using
try/catch blocks with async/await in Node.js?easy
Solution
Step 1: Understand async/await behavior
Async functions return promises and can throw errors when awaited operations fail.Step 2: Role of try/catch
Try/catch blocks catch these errors to prevent crashes and allow handling.Final Answer:
To catch and handle errors from asynchronous operations -> Option AQuick Check:
Error handling = A [OK]
Hint: Use try/catch around await to catch errors [OK]
Common Mistakes:
- Thinking async/await automatically handles errors
- Using try/catch outside async functions only
- Ignoring errors causing app crashes
2. Which of the following is the correct syntax to handle errors in an async function using async/await?
easy
Solution
Step 1: Check proper use of try/catch with await
async function fetchData() { try { await fetch(url); } catch (err) { console.error(err); } } correctly wraps the await call inside try and catches errors.Step 2: Identify incorrect patterns
async function fetchData() { await fetch(url).catch(console.error); } uses .catch on await which is invalid syntax; async function fetchData() { try { fetch(url); } catch (err) { console.error(err); } } misses await; async function fetchData() { await fetch(url); } has no error handling.Final Answer:
async function fetchData() { try { await fetch(url); } catch (err) { console.error(err); } } -> Option AQuick Check:
Try/catch with await = D [OK]
Hint: Put await inside try block to catch errors [OK]
Common Mistakes:
- Using .catch() directly on await expression
- Forgetting to use await inside try
- Not catching errors at all
3. Consider this code snippet:
What will be logged if the fetch fails due to network error?
async function getData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
} catch (error) {
return 'Error occurred';
}
}
getData().then(console.log);What will be logged if the fetch fails due to network error?
medium
Solution
Step 1: Analyze try/catch behavior on fetch failure
If fetch fails, control jumps to catch block which returns 'Error occurred'.Step 2: Understand promise resolution
getData returns a resolved promise with string 'Error occurred', so console.log prints that string.Final Answer:
'Error occurred' -> Option DQuick Check:
Catch returns string on error = B [OK]
Hint: Catch block return value is logged on error [OK]
Common Mistakes:
- Expecting unhandled error instead of caught return
- Confusing error object with returned string
- Ignoring async function returns promise
4. Identify the error in this async function:
async function loadUser() {
try {
const user = fetch('https://api.example.com/user');
console.log(user.name);
} catch (err) {
console.error(err);
}
}medium
Solution
Step 1: Check fetch usage
fetch returns a Promise; without await, user is a Promise object, not the resolved data.Step 2: Consequence of missing await
Accessing user.name fails because user is not the actual data but a Promise.Final Answer:
Missing await before fetch causing user to be a Promise -> Option BQuick Check:
Await missing = A [OK]
Hint: Always await fetch to get resolved data before use [OK]
Common Mistakes:
- Forgetting await before async calls
- Assuming fetch returns data directly
- Misplacing console.log outside async flow
5. You want to fetch user data and then fetch posts by that user. Both calls can fail. How should you handle errors to ensure you catch failures in either step and log a clear message?
async function getUserPosts(userId) {
// Your code here
}hard
Solution
Step 1: Understand error flow in async/await
A single try/catch can catch errors from any awaited call inside it.Step 2: Simplify error handling
Wrapping both awaits in one try/catch logs errors clearly without nesting complexity.Final Answer:
Use a single try/catch wrapping both awaits for user and posts fetch -> Option CQuick Check:
One try/catch covers multiple awaits = C [OK]
Hint: Wrap all awaits in one try/catch for simple error handling [OK]
Common Mistakes:
- Overcomplicating with nested try/catch
- Using .then().catch() mixing styles
- Not handling errors causing silent failures
