Skip to content
loading...

re: Modern JavaScript, 10 things you should be using, starting today VIEW POST

FULL DISCUSSION
 

My problem with async await is it seems to reduce options for error handling. Any way to mitigate that?

 

When you work with async/await you have the option to use catch as well.

For example:

await someAsync().catch(console.error);
 

Use try catch

try {
     await UserService.create(name, email);
} catch(error) {
    // Handle error
}
 

hi. Yes you can have a try/catch inside of your async function, you can also have an error callback on the promise that invoking the async method will result in. I'll update the example, appreciate you raising this issue :)

 

Thanks. I'd love to see how handling async/await errors can be done in a way that isn't just as complicated as then/catch

you can do

shop.getFreeKittens().then(kittens=>console.log(kittens), err=>{
  // do your thing
  console.error(err);
});

yes, definitely that too. In my example that would be a catch-all handler. question I think was how to handle per call . So in promises it would be:

getUser()
  .then(getOrderByUser, errorHandler)
  .then(getOrderItemsByOrder, errorHandler)

The above scenario is what I think we are discussing.

For an error handling approach for async/await, we could do this:

async function get() {
  let user, order;
  try {
    user = await getUser();
  } catch(err) {}

 try {
  order = await getOrderByUser(user);
 } catch(err) {

 }
...
}

get()
  .then(successHandler, errorHandler)

I get the feeling that people can feel a bit intimidated when they first see a longer promise chain. this is were I believe async/await come in to their own, When used properly async functions can look pretty simple and straight forward. I still prefer promise style functions for most async tasks tho. Especially task like my example above.

 

Can you return the items variable from outside the try{} block? Or would it be scoped inside the try block.

Yes you can, but if you return any value from a async function, the the promise that function returns will resolve, successfully.even if in the catch block of a try/catch block. This behavior can be vary useful. If you want the promise to throw an error you need to call

throw expression

Okay, are you saying that a try catch block is not even necessary? Because the results of the error will get shoved into whatever is returned by the async function either way?

code of conduct - report abuse