5 Async + Await Error Handling Strategies

  Рет қаралды 19,778

Wes Bos

Wes Bos

Жыл бұрын

Here are a few different ways that you can handle promises that reject

Пікірлер: 73
@mmapuppy
@mmapuppy Жыл бұрын
Wes posting on Twitter, and then merging all the Twitter feedback from programmers into KZfaq posts like this is the new ChatGPT. 🙌
@WesBos
@WesBos Жыл бұрын
😆
@noahcho5500
@noahcho5500 3 ай бұрын
ChadGPT
@zombiefacesupreme
@zombiefacesupreme Жыл бұрын
You know he's a tech dad when he not only has a box full of cables, but they're all properly bundled and organized.
@WesBos
@WesBos Жыл бұрын
haha that was a recent project! Used to be such a mess
@whitefluffycloud
@whitefluffycloud Жыл бұрын
Great summary! I've always struggled with error handling. How to set things up etc. This video was super helpful. Working a lot with React, the Go way makes a lot of sense.
@Dunktastic17
@Dunktastic17 Жыл бұрын
Nice to see you posting so much on KZfaq lately! Always quality content!
@WesBos
@WesBos Жыл бұрын
I appreciate that!
@Ouchie
@Ouchie Жыл бұрын
I was already using the Go way, but it is awesome to see that you can even expand it further.
@ahmad-murery
@ahmad-murery Жыл бұрын
Returning object is better for someone likes me who can't remember what he did a few minutes ago 😁 Nice little girl 😍, I'm happy you didn't cut the video. Thanks Wes!
@newstory8568
@newstory8568 Жыл бұрын
Always at the top 👌 Awesome video 👍
@MB-zj3er
@MB-zj3er Жыл бұрын
I found this extremely helpful. Thank you for taking the time to make the video.
@WesBos
@WesBos Жыл бұрын
you're welcome!
@apharos
@apharos Жыл бұрын
great video! Was exactly what I was looking for
@elmoutaouakkilmohammed1432
@elmoutaouakkilmohammed1432 Жыл бұрын
Fantastic video! Thank you
@moonstar_connor
@moonstar_connor Жыл бұрын
Great recap! I really like the Go way, but use the Rust way a lot because I use Supabase which does the same thing in its APIs (returning data, error, etc. for async operations)
@WesBos
@WesBos Жыл бұрын
Same thing with a lot of GraphQL libs - the Rust way seems more popular
@David-gj6dc
@David-gj6dc 2 ай бұрын
In Typescript, I prefer the go way using discriminated unions so you have to check either the data or error for a value
@NRNR-tw2fh
@NRNR-tw2fh Жыл бұрын
Thank you 👍👍👍
@nicolasparada
@nicolasparada Жыл бұрын
The "Go" way is superior, but looks off to use it in javascript. If you use it in a team, other people might find it weird 😅 But is nice since you can clearly handle each error separately, and you avoid nesting code. You can repeat "if error return" and clearly see the happy path of the program.
@user-lm5ju8nc2t
@user-lm5ju8nc2t 3 ай бұрын
Nice video. What is the extension you are using to log output right in editor? //?
@bok7660
@bok7660 Жыл бұрын
Thanks a lot for these "cheeses". Btw, can I ask how can I achieve the font style / theme you used on your vs code editor?
@WesBos
@WesBos Жыл бұрын
Cobalt2 and operator mono. Wesbos.com/uses for more info!
@brianmccoy9270
@brianmccoy9270 Жыл бұрын
Great video. How do you highlight your single line comments with the yellow background?
@WesBos
@WesBos Жыл бұрын
It’s a plugin called better comments. You write regex rules and the apply new styles. I have them for “method, exercise, solution, problem…”
@benfrese3573
@benfrese3573 Жыл бұрын
Thanks for the free therapy session!
@WesBos
@WesBos Жыл бұрын
We all deal with rejection from time to time
@benfrese3573
@benfrese3573 Жыл бұрын
@@WesBos fr
@AbdurRahman-rj9bv
@AbdurRahman-rj9bv 3 ай бұрын
Awesome
@r-i-ch
@r-i-ch Жыл бұрын
Great stuff! Question - You don't touch on try/catch/FINALLY blocks. What kind of data would a `finally` call have access to? Would it fit some of your error-handling use cases?
@WesBos
@WesBos Жыл бұрын
I did show it as one of the examples, but not the finally. That’s kinda like the allSettled, but it’s annoying because each try/catch/finally is scoped to its block, so you have to declare variables outside it. Has its use cases, especially when returning from a function, but not my go to
@joostschuur
@joostschuur Жыл бұрын
Talking head PIP looking great!
@WesBos
@WesBos Жыл бұрын
Thanks! Been working on it
@Lambdaphile
@Lambdaphile Жыл бұрын
I think I like the third (go) variant the most. 4 and 4.1 is ok too, but only if the error is returned as the first element, like in the third variant. Also, can't you type the returned tuple with TypeScript?
@WesBos
@WesBos Жыл бұрын
Yep - I think I said that in the video!
@DJAdams
@DJAdams Жыл бұрын
Came here just to say that your thumbnail game is strong with this video
@WesBos
@WesBos Жыл бұрын
hahaha thanks
@JanHonzaPozivil
@JanHonzaPozivil 7 ай бұрын
Re Method 4.0: What is the problem of using `null` in the returned tuple? Wes says that someone got mad at him over that on Twitter, but I'm struggling to see the reason why.
@ahmadmuslih
@ahmadmuslih Жыл бұрын
at 16:52 how can you open the code in that mode? Great video btw
@nicodindon7477
@nicodindon7477 Жыл бұрын
Nice tricks thanks! I'm sure it can improve readability of few functions at work. The biggest difficulty with errors in JS to me is the lack of "custom exceptions". In PHP i was used to `throw UserAccountException()` then catch only this exception in the place i want. I never found sastifying equivalent in JS :/
@WesBos
@WesBos Жыл бұрын
You can do this by passing a bound function, or passing the arguments as a second param, Then instead of passing in a promise, you pass in a function that can be called inside the try/catch. function wrapItButCallItToo(func) { try { // call it here - this will catch thrown errors too func(); } catch(e) { console.log(e) } }
@nicodindon7477
@nicodindon7477 Жыл бұрын
Thanks a lot Wes.
@VivekSingh-kx6ri
@VivekSingh-kx6ri Жыл бұрын
Whats Vscode Font style called ? Is it Free men?
@mystic_monk55
@mystic_monk55 Жыл бұрын
what is this extension which is showing the return value preview?
@WesBos
@WesBos Жыл бұрын
Quokka
@ukaszzbrozek6470
@ukaszzbrozek6470 Жыл бұрын
If someone use multiple wrapItObject he don't have to use object destructuring. Then it would be cleaner.
@farqueueman
@farqueueman 2 ай бұрын
I know that theme from a mile away. Cobalt2.
@lethienngan
@lethienngan Жыл бұрын
+1 thumbs-up +1 follower
@omomer3506
@omomer3506 Жыл бұрын
Yes these videos
@WesBos
@WesBos Жыл бұрын
Ya like?
@omomer3506
@omomer3506 Жыл бұрын
Dude, your podcast and your videos are the only reason i don't cry about feeling like a complete idiot, you simplify things even for us mortals
@josemarin359
@josemarin359 11 ай бұрын
Best solution to manage async and promises is to use js-awe library
@DioArsya
@DioArsya 5 ай бұрын
niceeeeeeeeeeee
@xinaesthetic
@xinaesthetic Жыл бұрын
I feel like ’settle' might be a better name for 'wrapIt'.
@WesBos
@WesBos Жыл бұрын
Yeah wrap it isn’t a good name
@jaspreetsingh2379
@jaspreetsingh2379 Жыл бұрын
Javascript added a new feature called error. cause. That helps with debugging
@ejnshtein
@ejnshtein Жыл бұрын
So, basically, we add sausages from Goland to JS 🤔 Okay, I'm in.
@WesBos
@WesBos Жыл бұрын
Sounds delicious. I’m in too
@sahassaurav4144
@sahassaurav4144 Жыл бұрын
I use async await with .catch() and to handle thrown error I use global try catch block
@WesBos
@WesBos Жыл бұрын
Cool - global you mean like wrapped around your entire set of logic for handing something like a route or controller?
@sahassaurav4144
@sahassaurav4144 Жыл бұрын
@@WesBos try { const value = await doSomething().catch() } catch() { // Handle thrown error here }
@markridgway249
@markridgway249 Жыл бұрын
should have had that On Air light on
@WesBos
@WesBos Жыл бұрын
Good call. I’m hoping to automate it
@TamanKodeKode
@TamanKodeKode Жыл бұрын
when Go engineer write JS
@FredoCorleone
@FredoCorleone 3 ай бұрын
I don't get why try/catch is uglier than a custom method that wraps the promise and returns a tuple data, err. IMO the latter is uglier, please try to convince me the Go way is better.
@d33bo67
@d33bo67 24 күн бұрын
back in the Nodejs days lol
@TheNoim
@TheNoim Жыл бұрын
// There is a good reason why I prefer the throw approach: // Most of the time when I write a server-side app, I don't really care about the individual error. If something fails while executing my "action" (for example in a request), it should just throw. My server framework of choice probably has a built-in error handler. // This is why I don't like it when libraries use the go approach. If an action fails, it should fail. // Here is an example: someserver.get("/some/route", async () => { const someData = await someDb.getData(); // If this fails, the framework error handler should just deal with it. Frameworks like Nest allow you to customize the error handler, which is really nice. // Do something with the data return someData; }); // With the go approach, I would need to do something like this: someserver.get("/some/route", async () => { const [error, someData] = await someDb.getData(); if (error) { // I don't care about the error throw error; } // Do something with the data return someData; }); // A hybrid approach for me would be something like this: class Result { constructor(private readonly _error, private readonly _data) {} get error() { return this._error; } get data() { return this._data; } orThrow() { if (this._error) { throw this._error; } return this._data } } someserver.get("/some/route", async () => { const someData = (await someDb.getData() /* Returns Result type **/).orThrow(); // Or const { data, error } = await someDb.getData() if (error) { // Do something with it } // Do something with the data return someData; }); Even better, everything could be usable: // Go style via promise extension interface Promise { goStyle(): Promise; } someserver.get("/some/request", async () => { // .goStyle() is optional. You can still use the default try/catch const [error, data] = await db.classicGetData().goStyle(); if (error) { throw error; } // Do something return data; }); // Rust style via promise extension interface Promise { asResult(): Promise; } someserver.get("/some/request", async () => { const result = await db.rustStyleGetData().asResult(); if (result.error) { // do something return } // Do something return result.data; });
@spondoolie6450
@spondoolie6450 17 күн бұрын
method 3 💪
@soniablanche5672
@soniablanche5672 Жыл бұрын
You can technically get both data and error at the same time with promises too, by using Promise.allSettled(). This function always resolves, so you don't need a catch block for it.
@WesBos
@WesBos Жыл бұрын
You should watch the whole video!
@FadlySansan
@FadlySansan Жыл бұрын
@@WesBos lol
@indrajitsarkar3169
@indrajitsarkar3169 Жыл бұрын
Promise.allSettled way is pretty cool, definitely going to use.
@AshishVermaCS
@AshishVermaCS Жыл бұрын
For someone like me who was using await my promise().catch(errHandler); This is gem - thanks for sharing Wes
The Async Await Episode I Promised
12:04
Fireship
Рет қаралды 1,1 МЛН
How to handle Node.js errors like a Pro?
12:44
Software Developer Diaries
Рет қаралды 23 М.
FOOTBALL WITH PLAY BUTTONS ▶️❤️ #roadto100million
00:20
Celine Dept
Рет қаралды 21 МЛН
Шокирующая Речь Выпускника 😳📽️@CarrolltonTexas
00:43
Глеб Рандалайнен
Рет қаралды 12 МЛН
That's NOT How Async And Await Works in .NET!
12:25
Codewrinkles
Рет қаралды 15 М.
Asynchronous JavaScript Course (Async/Await, Promises, Callbacks)
1:36:23
freeCodeCamp.org
Рет қаралды 655 М.
Solving a JavaScript Array Reduce Interview Question
11:27
Wes Bos
Рет қаралды 22 М.
Async + Await in JavaScript, talk from Wes Bos
15:52
freeCodeCamp.org
Рет қаралды 117 М.
Error Handling in NodeJS (Complete Guide) | Node Tutorial
17:54
Nikita Dev
Рет қаралды 38 М.
5 Useful Dunder Methods In Python
16:10
Indently
Рет қаралды 51 М.
Mi primera placa con dios
0:12
Eyal mewing
Рет қаралды 719 М.
TOP-18 ФИШЕК iOS 18
17:09
Wylsacom
Рет қаралды 666 М.
сюрприз
1:00
Capex0
Рет қаралды 1,3 МЛН
iPhone 15 Pro vs Samsung s24🤣 #shorts
0:10
Tech Tonics
Рет қаралды 13 МЛН
Samsung S24 Ultra professional shooting kit #shorts
0:12
Photographer Army
Рет қаралды 15 МЛН