DEV Community

Omi
Omi

Posted on

2 1

Will it catch?🤯

Was just recovering from last Node.js blocking non-blocking stuff, I come to another JS injury called error-handling with promises.

This injury was again caused to me by not being able to distinguish between blocking and non-blocking code.

The below question is from javascript.info website.

What do you think? Will the .catch trigger? Explain your answer.

new Promise(function (resolve, reject) {
  setTimeout(() => {
    throw new Error("Whoops!");
  }, 1000);
}).catch(console.error);
Enter fullscreen mode Exit fullscreen mode

The hint: Look at the code like this:

new Promise(function (resolve, reject) 
// try {
{
  setTimeout(() => {
    throw new Error("Whoops!");
  }, 1000);
})
//} catch {
.catch(console.error);
// }
Enter fullscreen mode Exit fullscreen mode

Comment down your answer below!

Top comments (2)

Collapse
 
deep_gandhi_4070895b20965 profile image
Deep Gandhi •

I thought the compiler would catch it, but when I ran it, the result differed from my expectation. Maybe it's because the error is in a different scope inside setTimeout? 🤔

Collapse
 
ompals profile image
Omi •

The main thread execution looks something like this:

new Promise(function (resolve, reject) 
try {
  // Register a setTimeout I/O
} catch(e) {
console.error(e.message);
}

// After 1 second
throw new Error("Whoops!");
Enter fullscreen mode Exit fullscreen mode

The throw error statement will hang outside try...catch guards when defined in a callback of an async operation.

Image of Datadog

Create and maintain end-to-end frontend tests

Learn best practices on creating frontend tests, testing on-premise apps, integrating tests into your CI/CD pipeline, and using Datadog’s testing tunnel.

Download The Guide