We use error handling with async and await to catch problems when waiting for tasks that take time, like loading data from the internet. It helps keep the program running smoothly without crashing.
Error handling with async and await in Javascript
async function example() { try { const result = await someAsyncTask(); // use result here } catch (error) { // handle error here } }
The async keyword makes a function return a promise and allows using await inside it.
The try...catch block is used to catch errors that happen during the awaited task.
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('Error fetching data:', error); } }
async function waitAndFail() { try { await Promise.reject(new Error('Oops!')); } catch (error) { console.log('Caught error:', error.message); } }
This program waits for a promise that gives the number 42 and prints it. If there was an error, it would print the error instead.
async function getNumber() { try { const number = await Promise.resolve(42); console.log('Number is', number); } catch (error) { console.log('Error:', error); } } getNumber();
Always use try...catch inside async functions to handle errors gracefully.
Without try...catch, errors in awaited promises can crash your program or go unnoticed.
You can also use .catch() on promises, but try...catch with async/await looks cleaner and is easier to read.
Use async and await to write asynchronous code that looks like normal code.
Wrap awaited calls in try...catch to catch and handle errors.
This helps keep your program running smoothly and makes debugging easier.
Practice
try...catch with async and await in JavaScript?Solution
Step 1: Understand async/await behavior
Async functions return promises, and await pauses execution until the promise settles.Step 2: Role of try...catch with async/await
Errors in awaited promises can be caught using try...catch to prevent program crashes.Final Answer:
To handle errors that occur during asynchronous operations -> Option AQuick Check:
Error handling = To handle errors that occur during asynchronous operations [OK]
- Thinking async/await makes code synchronous
- Ignoring errors from awaited promises
- Using try...catch without async functions
Solution
Step 1: Identify correct try...catch syntax
try...catch blocks wrap code that might throw errors; await must be inside try.Step 2: Check each option's syntax
try { await asyncFunc(); } catch (error) { console.log(error); } correctly wraps await in try and catches errors; others have syntax errors or misuse await.Final Answer:
try { await asyncFunc(); } catch (error) { console.log(error); } -> Option DQuick Check:
Correct try...catch with await = try { await asyncFunc(); } catch (error) { console.log(error); } [OK]
- Placing await outside try block
- Using incorrect try...catch syntax
- Confusing promise.catch with try...catch
async function fetchData() {
try {
let result = await Promise.reject('Failed');
console.log('Success:', result);
} catch (error) {
console.log('Error:', error);
}
}
fetchData();Solution
Step 1: Analyze Promise.reject inside try block
Promise.reject('Failed') creates a rejected promise; await pauses until rejection.Step 2: Catch block handles the rejection error
The rejection triggers catch block, printing 'Error: Failed'.Final Answer:
Error: Failed -> Option BQuick Check:
Rejected promise caught = Error: Failed [OK]
- Expecting success message on rejection
- Missing catch block causes unhandled rejection
- Confusing Promise.reject with Promise.resolve
async function load() {
try {
const data = await fetch('https://api.example.com/data');
} catch {
console.log('Fetch failed');
}
}
load();Solution
Step 1: Check catch block syntax
Catch block should have an error parameter to receive the error object.Step 2: Confirm other parts are correct
fetch returns a promise and can be awaited; async keyword is present; try can contain await.Final Answer:
Missing error parameter in catch block -> Option AQuick Check:
Catch needs error parameter = Missing error parameter in catch block [OK]
- Omitting error parameter in catch
- Thinking fetch is synchronous
- Removing async keyword by mistake
Solution
Step 1: Understand error handling for multiple awaits
Separate try...catch blocks allow handling errors individually without stopping the whole function.Step 2: Analyze each option
async function getUserAndPosts() { try { const user = await fetch('/user'); } catch (e) { console.log('User fetch error:', e); } try { const posts = await fetch(`/posts?userId=${user.id}`); } catch (e) { console.log('Posts fetch error:', e); } } uses separate try...catch for user and posts fetch, logging errors and continuing execution. async function getUserAndPosts() { try { const user = await fetch('/user'); const posts = await fetch(`/posts?userId=${user.id}`); } catch (e) { console.log('Error:', e); } } stops on first error. async function getUserAndPosts() { const user = await fetch('/user').catch(e => console.log('User fetch error:', e)); const posts = await fetch(`/posts?userId=${user.id}`).catch(e => console.log('Posts fetch error:', e)); } mixes await with .catch but can cause undefined user. async function getUserAndPosts() { const user = fetch('/user'); const posts = fetch(`/posts?userId=${user.id}`); console.log('Data fetched'); } lacks await and error handling.Final Answer:
Option C correctly handles errors separately and continues execution -> Option CQuick Check:
Separate try...catch for each await = async function getUserAndPosts() { try { const user = await fetch('/user'); } catch (e) { console.log('User fetch error:', e); } try { const posts = await fetch(`/posts?userId=${user.id}`); } catch (e) { console.log('Posts fetch error:', e); } } [OK]
- Using one try...catch for multiple awaits stopping on first error
- Mixing await with .catch causing undefined variables
- Not awaiting fetch calls
Ready to prove it?
Pass the test and this pattern moves unknown
