Syncing Async

Post on 29-Nov-2014

1.811 views 5 download

description

Syncing Async with Kyle Simpson Presented on September 17 2014 at FITC's Web Unleashed Toronto 2014 I bet you think “callback hell” is about function nesting and levels of indentation. Not so much. I bet you’ve heard that Promises replace callbacks. Nope. We need some clarity on what async flow control is all about in JavaScript. We’ll explore the perils of “Inversion of Control”, and see just what hell that leads us to. Then we’ll talk about promises as “continuation events” for function calls, and abstractions on top of promises that clean up our code. Finally, we’ll see how generators give us synchronous-looking async, and even how we can create cooperative concurrency with coroutines. Yield those confused async notions and control your flow. I promise we’ll get your thoughts in order. OBJECTIVE Learn why async flow control patterns are necessary for JS, why callbacks aren’t sufficient and how promises and generators are the solution. TARGET AUDIENCE JS developers ASSUMED AUDIENCE KNOWLEDGE Intermediate to advanced JS (3+ years experience). FIVE THINGS AUDIENCE MEMBERS WILL LEARN Why our brains reason about code differently than the JS engine does Why callback hell has much less to do with nesting/indentation than you thought What inversion of control is all about, and what trust issues it creates for our code What promises are and why they not only make code easier to reason about, but also solve inversion of control issues Why generators are even better, and how generators+promises are potentially the best pattern we can achieve thus far

Transcript of Syncing Async

syncing asynckyle simpson

@getifyhttp://getify.me

to get started...

vs.

parallel

async

threads

event-loop concurrency

1234

123

1

2

34

1

23 done!

done!

async patterns

callbacks==

continuations

callbacksgot

problems2 major^

“callback hell”

still “callback hell”

inversion of control

trust:1. not too early2. not too late3. not too many times4. not too few times5. no lost context6. no swallowed errors...

nested callbacksare not

reasonable

we write

such syncmany steps

very wow

we think

js thinks

sync-looking async

synchronoussequentialblocking

hell is callbacks

-Sartre

promise: future value

promise: “completion” event

promises:1. only resolved once2. either success OR error3. messages passed/kept4. exceptions become errors5. immutable once resolved

uninversion of control

promise: flow control

scenario:load files in parallel, render in order, but ASAP

cool story, bro.

but...

scenario:timeout of a promise

promise abstractions

sequence=

series of automatically

chained promises

github.com/getify/asynquence

async + sequence =

asynquence

remember?load files in parallel, render in order, but ASAP

promises without all the fuss

gimme moar sync

ES6 generators

davidwalsh.name/es6-generators

generator + promises

yield promises

what about pre-ES6 browsers?

facebook.github.io/regenerator/

transpiledES5

“generators”

CSP-likeconcurrency

.done()

chuckle, chuckle

thx!

kyle simpson@getify

http://getify.me