DEV Community

Discussion on: Say goodbye Trycatch Hell

Collapse
 
ivanzm123 profile image
Ivan Zaldivar

Thank you for your contribution, my friend.

Personally, I do not like to handle errors that way, I consider them incorrect, I leave you the link so you can take a look about making these exceptions: developer.mozilla.org/docs/Web/Jav...

async function getUser(id: number): Promise<User> {
  // We throw an exception.
  if (id <= 0) throw new Error("Wrong, id can't be less or equal to zero!!!");
  // Result.
  return { id, email: "abc@domain.com" };
}

Enter fullscreen mode Exit fullscreen mode

Now we handle it.

async function handleRequest(req: Request, res: Response) {
  const [user, err] = await promHandler(getUser(Number(req.params.id)));
  if (!user || err) return res.status(400).json({
    name: "BadRequest",
    message: err.message
  });
  res.status(200).json(user);
}

Enter fullscreen mode Exit fullscreen mode
Collapse
 
gers2017 profile image
Gers2017

Sure, I actually like the golang pattern because is easy to read.
Also I got a different approach by asking about this.

type Result<T> = 
{ result: T, error?: undefined } ||  
{ result?: undefined, error: Error }
Enter fullscreen mode Exit fullscreen mode
async function getUserData(id: number): Promise<Result<UserData>>{
    if(id <= 0){
        return {
            error: new Error("Wrong, id can't be less or equal to zero!!!");
        }
    }
    return {
        result: {name: "Jimmy", age: 22},
    }
}
Enter fullscreen mode Exit fullscreen mode