JavaScript Jabber

JSJ 399: Debugging with Async/Await with Valeri Karpov


Listen Later

Valeri Karpov is a maintainer on Mongoose, has started a few companies, and works for a company called Booster Fuels. Today’s topic debugging with Async/Await. The panel talks about some of the challenges of debugging with Async. AJ, however, has never encountered the same problems, so he shares his debugging method. Valeri differentiates between .catch vs try...catch, and talks about why he prefers .catch. There are two ways to handle all errors in an async function without leading to an unhandled promise rejection. The first is to wrap the entire body of the async function in a try...catch, has some limitations. Calling an async function always returns a promise, so the other approach is calling .catch on the promise to handle any errors that occur in that function body. One of the key differences is if you return a promise within an async function, and that return promise is wrapped in a try...catch, the catch block won’t get called if that promise is rejected, whereas if you call .catch on the promise that the function returns, you’ll actually catch that error. There are rare instances where this can get tricky and unintuitive, such as where you have to call new promise and have resolve and reject, and you can get unexpected behavior.The panel discusses Valeri’s current favorite JS interview question, which is,  “Given a stream, implement a function called ‘stream to promise’ that, given a stream, returns a promise that resolves to the concatenation of all the data chunks emitted by the stream, or rejects if the stream emits an error event.” It’s really simple to get this qustion right, and really simple to get it wrong, and the difference can be catastrophic. AJ cautions listeners to never use the data event except in the cases Val was talking about, only use the readable event.The conversation turns to the function of a readable event. Since data always pushes data, when you get a readable event, it’s up to you to call read inside the function handler, and then you get back a chunk of data, call read again and again until the read returns null. When you use readable, you are in control and you avoid piling functions into RAM. In addition, the right function will return true or false to let you know if the buffer is full or not. This is a way to mix imperative style into a stream.The next discussion topics are the differences between imperative style and reactive style and how a waits and promises work in a normal four loop. A wait suspends the execution of a function until the promise is resolved. Does a wait actually stop the loop or is it just transpiling like a promise and it doesn’t stop the loop. AJ wrote a module called Batch Async to be not as greedy as promise.all but not as limited as other options.The JavaScript panelists talk about different async iterators they’ve used, such as Babel. They discuss the merits of Babel, especially since baseline Android phones (which a significant portion of the population of the world uses) run UC Browser that doesn’t support Babel, and so a significant chunk of the population of the world. On the other hand, if you want to target a large audience, you need to use Babel.Since frameworks in general don’t handle async very well, the panel discusses ways to mitigate this. They talk about different frameworks like Vue, React, and Express and how they support async functions. They discuss why there is no way for you to actually cancel an async option in an actual case, how complex canceling is, and what you are really trying to solve for in the cancellation process. Canceling something is a complex problem. Valeri talks about his one case where he had a specific bug that required non-generic engineering to solve, and cancelling actually solved something. When AJ has come across cancellation issues, it’s very specific to that use case. The rest of the panelists talk about their experiences with having to cancel something. Finally, they talk about their experience with async generator functions. A generator is a function that lets you enter into the function later. This makes sense for very large or long running data sets, but when you have a bounded items, don’t complicate your code this way. When an async generator function yields, you explicitly need to call next in order for it to pick up again. If you don’t call ‘next’, it’s essentially cancelled. Remember that object.keys and object.values are your friends. Panelists
  • Christopher Buecheler
  • AJ O’Neal
  • Charles Max Wood
With special guest: Valeri KarpovSponsors
  • The DevEd Podcast
  • Sentry use the code “devchat” for 2 months free on Sentry’s small plan
  • Adventures in DevOps
Links
  • Mongoose
  • Express 5
  • Node Streams
  • Pull Streams
  • Masteringjs.io
  • MongoDB
  • Babel
  • HTML
  • Webpack
  • Vue
  • Express
  • RxJS
  • Console.log
  • Json.stringify
  • Batchasync.js
  • How to Write Batch Async Functions
Follow DevChatTV on Facebook and Twitter PicksAJ O’Neal:
  • Ethan Garofolo YouTube
Christopher Buecheler:
  • Functional Design Patterns for Express.js
Charles Max Wood:
  • Microsoft Ignite
  • Maxcoders.io
Valeri Karpov:
  • Follow Valeri on Twitter @code_barbarian and Github @vkarpov15
  • Masteringjs.io
  • Jurassic Park: A Novel
Special Guest: Valeri Karpov.

Support this podcast at — https://redcircle.com/javascript-jabber/donations

Privacy & Opt-Out: https://redcircle.com/privacy

Become a supporter of this podcast: https://www.spreaker.com/podcast/javascript-jabber--6102064/support.
...more
View all episodesView all episodes
Download on the App Store

JavaScript JabberBy Charles M Wood

  • 4.4
  • 4.4
  • 4.4
  • 4.4
  • 4.4

4.4

234 ratings


More shows like JavaScript Jabber

View all
Freakonomics Radio by Freakonomics Radio + Stitcher

Freakonomics Radio

32,333 Listeners

The Tim Ferriss Show by Tim Ferriss: Bestselling Author, Human Guinea Pig

The Tim Ferriss Show

16,178 Listeners

The Changelog: Software Development, Open Source by Changelog Media

The Changelog: Software Development, Open Source

289 Listeners

Ruby Rogues by Charles M Wood

Ruby Rogues

45 Listeners

The Freelancers' Show by Charles M Wood

The Freelancers' Show

23 Listeners

The a16z Show by Andreessen Horowitz

The a16z Show

1,101 Listeners

Software Engineering Daily by Software Engineering Daily

Software Engineering Daily

624 Listeners

Talk Python To Me by Michael Kennedy

Talk Python To Me

581 Listeners

iPhreaks by Charles M Wood

iPhreaks

17 Listeners

React Native Radio by Jamon Holmgren, Robin Heinze, Mazen Chami

React Native Radio

67 Listeners

Adventures in Angular by Charles M Wood

Adventures in Angular

15 Listeners

JavaScript Jabber by Charles M Wood

JavaScript Jabber

62 Listeners

Ruby Rogues by Charles M Wood

Ruby Rogues

21 Listeners

My JavaScript Story by Charles M Wood

My JavaScript Story

4 Listeners

My Ruby Story by Charles M Wood

My Ruby Story

0 Listeners

Syntax - Tasty Web Development Treats by Wes Bos & Scott Tolinski - Full Stack JavaScript Web Developers

Syntax - Tasty Web Development Treats

988 Listeners

The Indicator from Planet Money by NPR

The Indicator from Planet Money

9,566 Listeners

Tech Brew Ride Home by Morning Brew

Tech Brew Ride Home

969 Listeners

All-In with Chamath, Jason, Sacks & Friedberg by All-In Podcast, LLC

All-In with Chamath, Jason, Sacks & Friedberg

10,268 Listeners

Deep Questions with Cal Newport by Cal Newport

Deep Questions with Cal Newport

1,339 Listeners

Dwarkesh Podcast by Dwarkesh Patel

Dwarkesh Podcast

528 Listeners

Latent Space: The AI Engineer Podcast by Latent.Space

Latent Space: The AI Engineer Podcast

98 Listeners

BG2Pod with Brad Gerstner and Bill Gurley by BG2Pod

BG2Pod with Brad Gerstner and Bill Gurley

460 Listeners

AI + a16z by a16z

AI + a16z

34 Listeners