Error Handling in JavaScript: try, catch, finally

Discover how to control the flow of your program and handle unexpected issues to build robust, crash-proof applications.

😊

Welcome! Let's learn to handle JavaScript errors without crashing our app.

/* Your code is running smoothly... */

The 'try' Block: The Danger Zone

The try block is where you place code that might cause an error. It's like a designated "danger zone." If any code inside this block fails, JavaScript won't crash; instead, it will immediately jump to the catch block.

The 'catch' Block: The Safety Net

The catch block is the safety net. It only runs if an error occurs in the corresponding try block. It receives an 'error object' as an argument, giving you information about what went wrong so you can log it or inform the user.

The 'finally' Block: The Cleanup Crew

The finally block is the cleanup crew. This code runs after the try and catch blocks, regardless of whether an error occurred or not. It's perfect for tasks that must happen, like closing a file or disconnecting from a database.

The 'throw' Statement: Creating Custom Errors

The throw statement allows you to create your own custom errors. This is incredibly useful for validating function inputs or enforcing business rules, giving you more control over your application's flow when things don't go as planned.

Practice Zone


Interactive Test 1: Match the Blocks

Drag each keyword to its correct description.

Arrastra en el orden correspondiente.


Arrastra las opciones:

catch(error) { }
finally { }
try { }

Completa el código:

Contains code that might fail.______
Executes only if an error occurs.______
Always executes, error or not.______
Unlock with Premium

Interactive Test 2: Build the Structure

Complete the error handling structure by filling in the blanks.

Rellena los huecos en cada casilla.

 {
  // Risky operation
}
 (error) {
  // Handle the error
}
 {
  // Cleanup
}
Unlock with Premium

Practice Example: Code Editor

Write a function divide(a, b) that uses try...catch to handle division by zero. If b is 0, it should throw a new Error. The catch block should log the error message.

Enunciado:

* Escribe el código a continuación. Los caracteres correctos se mostrarán en verde y los incorrectos en rojo.

function divide(a, b) { try { if (b === 0) { throw new Error("Cannot divide by zero!"); } return a / b; } catch (error) { console.error(error.message); } }
Unlock with Premium

Knowledge Check

Which block of code will always execute, regardless of an error?


Unlock with Premium

Practical Error Handling Patterns

Good error handling is more than just avoiding crashes. It's about creating a resilient and user-friendly application. Here are some common patterns.


1. Failing Gracefully

Instead of showing a broken page, catch the error and display a friendly message to the user. This maintains a professional user experience even when things go wrong behind the scenes.

try {
  // fetch data from API
} catch (error) {
  displayMessage("Oops! We couldn't load the data.");
}

2. Logging Errors for Debugging

Users shouldn't see technical error details, but you, the developer, need them. In the catch block, send the error details to a logging service so you can diagnose and fix the bug later.

catch (error) {
  console.error("API Fetch Failed:", error);
  // In a real app, send this to a service
  // like Sentry, LogRocket, etc.
}

3. Custom Errors for Validation

Use throw to enforce rules in your code. This makes your functions more predictable and easier to debug. For example, ensure a username is not empty before creating an account.

function createUser(username) {
  if (!username) {
    throw new Error('Username is required.');
  }
  // ... create user logic
}

Username is required.


Practical Takeaway: Think of try...catch not just as an error-stopper, but as a powerful tool for controlling your application's flow and improving both the user and developer experience.

Error Handling Glossary

try
A block of code that encloses statements that might throw an exception.
catch
A block of code that is executed if an exception is thrown in the try block. It receives the error object.
finally
A block of code that is executed after the try and catch blocks complete, regardless of whether an exception was thrown.
throw
A statement used to create a user-defined exception. It halts execution and passes control to the nearest catch block.
Exception
An anomalous or exceptional condition requiring special processing. When thrown, it disrupts the normal flow of the program.
Error Object
An object that is passed to the catch block. It typically contains information about the error, such as a descriptive `message` and a `stack` trace.
Stack Trace
A report of the active stack frames at a certain point in time during the execution of a program. It helps in debugging by showing the sequence of function calls that led to the error.