Your product could be here, in front of thousands of JavaScript developers. Sponsor this spot →
JavaScript Quiz

Why doesn't try/catch catch an error from an async function?

Do you know what will be the output of this code?

JavaScript
async function fail() {
  throw new Error("oops");
}

try {
  fail();
  console.log("no error");
} catch (e) {
  console.log("caught");
}
Show answer and explanation

The answer is "no error".

fail() doesn’t throw. It returns a rejected promise. The try block finishes normally, and the rejection is unhandled. Use await fail() inside an async function so catch can see it.

Take the full quiz Next question →

More Promises & Async questions

  1. Why does an arrow function in setTimeout keep this?
  2. Why does a Promise run before setTimeout 0?
  3. What does an async function return in JavaScript?
  4. What runs first after await in JavaScript?
  5. Is the Promise constructor callback synchronous?

Related topics