Codectionary / Developer documentation / JavaScript

Error Handling: try/catch/finally

try...catch lets you handle errors gracefully instead of letting them crash your program. Code that might fail goes in the try block; if an error occurs, control jumps to the catch block. finally runs regardless of whether an error occurred, useful for cleanup. The throw statement lets you raise your own custom errors.

Syntax

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

Examples

Basic try...catch

Catching an error and handling it instead of crashing.

try {
  const data = JSON.parse("{ invalid json");
} catch (error) {
  console.log("Failed to parse:", error.message);
}

console.log("Program continues running");

finally for Cleanup

finally always runs, whether or not an error occurred.

function processData() {
  console.log("Starting...");
  try {
    throw new Error("Something went wrong");
  } catch (error) {
    console.log("Caught:", error.message);
  } finally {
    console.log("Cleanup runs regardless"); // always executes
  }
}

processData();

Throwing Custom Errors

Creating and throwing your own errors with meaningful messages.

function withdraw(balance, amount) {
  if (amount > balance) {
    throw new Error("Insufficient funds");
  }
  return balance - amount;
}

try {
  withdraw(100, 150);
} catch (error) {
  console.log(error.message); // "Insufficient funds"
  console.log(error.name);    // "Error"
}

Best practices

  • Only wrap code that can genuinely fail in try/catch - wrapping too much makes it harder to know what actually went wrong
  • Always throw Error objects (or subclasses) rather than plain strings, so the stack trace and error.message are available
  • Use finally for cleanup that must happen either way, like closing a connection or hiding a loading spinner
  • Avoid using try/catch for normal control flow - reserve it for genuinely exceptional, unexpected situations

At a glance

Purpose
Application logic and interaction
File extension
.js ยท .mjs
Runs in
Browsers and JavaScript runtimes
Usually used with
HTML, CSS and Web APIs

Specifications & further reading

Related JavaScript documentation