SlideShare ist ein Scribd-Unternehmen logo
1 von 121
Downloaden Sie, um offline zu lesen
THE EVOLUTION OF
ASYNCHRONOUS
JAVASCRIPT
@cirpo
Tech Lead/Coach @
@cirpo
ASYNCHRONY
ASYNC
IS
HARD
every time you use
setTimeout()
in a test
a unicorn dies
ASYNC
IS
HARD
SAD PANDA
SEQUENTIAL BRAIN
SEQUENTIAL BRAIN
Put aside involuntary,
subconscious,
automatic
brain functions
we are not multitasker!
❀
“Always bet on JavaScript”
Brendan Eich
“any application that can be written
in JavaScript, 
will eventually be written
in JavaScript”
JeïŹ€ Atwood
JAVASCRIPT
IS NON-BLOCKING
events
eventloop
net
ïŹlesystem


event queue thread pool
JS IS NON-BLOCKING
JS unlike a lot of other languages
never blocks
handling I/O is typically performed
via events and callbacks
JS unlike a lot of other languages
never blocks
handling I/O is typically performed
via events and callbacks
//cart
loadUserInfo()
loadCartItems()
retrieveExchangeRates()
calculateTotal()
JS unlike a lot of other languages
never blocks
handling I/O is typically performed
via events and callbacks
function getTotal() {
let total = 0
try {
const userInfo = loadUserInfo()
const cartItems = loadCartItems()
const exr = retrieveExchangeRates()
total = calculateTotal(userInfo, cartItems, exr)
} catch (error) {
}
return total
}
JS unlike a lot of other languages
never blocks
handling I/O is typically performed
via events and callbacks
function getTotal() {
let total = 0
try {
const userInfo = loadUserInfo()
const cartItems = loadCartItems()
const exr = retrieveExchangeRates()
total = calculateTotal(userInfo, cartItems, exr)
} catch (error) {
}
return total
}
can we do this?
JS unlike a lot of other languages
never blocks
handling I/O is typically performed
via events and callbacks
function getTotal() {
let total = 0
try {
const userInfo = loadUserInfo()
const cartItems = loadCartItems()
const exr = retrieveExchangeRates()
total = calculateTotal(userInfo, cartItems, exr)
} catch (error) {
}
return total
}
we could but
..
we are blocking!
JS unlike a lot of other languages
never blocks
handling I/O is typically performed
via events and callbacks
function getTotal() {
let total = 0
try {
const userInfo = loadUserInfo()
const cartItems = loadCartItems()
const exr = retrieveExchangeRates()
total = calculateTotal(userInfo, cartItems, exr)
} catch (error) {
}
return total
}
we have to “wait”
what if waiting
was easy as
blocking
ASYNCRONY
callback
promise
async/await
HOW DID WE
GET THERE?
WHY DID WE
GET THERE?
what if waiting
was easy as
blocking
block
=
pull
const userInfo = loadUserInfo()
const cartItems = loadCartItems()
const exchangeRates = retrieveExchangeRates()
BLOCKING = PULL
block
=
pull
CALLBACK
CALLBACK
//cart
loadUserInfo(function(){
loadCartItems()
retrieveExchangeRates()
calculateTotal()
})
CALLBACK
//cart
loadUserInfo(function(){
loadCartItems(function(){
retrieveExchangeRates()
calculateTotal()
})
})
CALLBACK
//cart
loadUserInfo(function(){
loadCartItems(function(){
retrieveExchangeRates(function(){
calculateTotal(function(){
})
})
})
})
CALLBACK
//cart
loadUserInfo(function(){
loadCartItems(function(){
retrieveExchangeRates(function(){
calculateTotal(function(){
})
})
})
})
CALLBACK
//cart
loadUserInfo(function(){
loadCartItems(function(){
retrieveExchangeRates(function(){
calculateTotal(function(){
})
})
})
})
sometimes
we are just
lazy
CALLBACK
const fs = require('fs')
const file = './todo.txt'
fs.readFile(file, 'utf8', function(err, todoList) {
if (err) return console.log(err)
todoList = todoList + 'n watch GOT'
fs.writeFile(file, todoList, function(err) {
if(err) return console.log(err)
console.log('todo added!')
})
})
CALLBACK
const fs = require('fs')
const file = './todo.txt'
fs.readFile(file, 'utf8', addTodo)
function notify(err) {
if(err) return console.log(err)
console.log(‘todo added!')
}
function addTodo(err, todoList) {
if (err) return console.log(err)
todoList = todoList + 'n watch GOT’
fs.writeFile(file, todoList, notify)
}
wait
=
push
CALLBACK
const fs = require('fs')
const file = './todo.txt'
fs.readFile(file, 'utf8', addTodo)
function notify(err) {
if(err) return console.log(err)
console.log(‘todo added!')
}
function addTodo(err, todoList) {
if (err) return console.log(err)
todoList = todoList + 'n watch GOT’
fs.writeFile(file, todoList, notify)
}
LOSS OF
ERROR HANDLING
CALLBACK
const fs = require('fs')
const file = './todo.txt'
fs.readFile(file, 'utf8', addTodo)
function notify(err) {
if(err) return console.log(err)
console.log(‘todo added!')
}
function addTodo(err, todoList) {
if (err) return console.log(err)
todoList = todoList + 'n watch GOT’
fs.writeFile(file, todoList, notify)
}
INVERSION OF
CONTROL
“Don't call us, we'll call you”
CALLBACK
//cart
loadUserInfo(function(){
loadCartItems(function(){
retrieveExchangeRates(function(){
calculateTotal(function(){
})
})
})
})
CALLBACK
what if it’s never called?
what if it’s called more then once?
what if it’s called too early?
HOW CAN YOU TELL
IF IT’S AN ASYNC
CALLBACK?
READ THE SOURCE LUKE!
I ❀ CALLBACK
Callbacks are the fundamental unit
of asynchrony in JS
But sometimes they’re not enough
for the evolving landscape
of async programming as JS matures
what if waiting
was easy as
blocking
JS unlike a lot of other languages
never blocks
handling I/O is typically performed
via events and callbacks
function getTotal() {
let total = 0
try {
const userInfo = loadUserInfo()
const cartItems = loadCartItems()
const exr = retrieveExchangeRates()
total = calculateTotal(userInfo, cartItems, exr)
} catch (error) {
}
return total
}
PROMISE
PROMISE
This lets asynchronous methods return
values like synchronous methods
instead of the ïŹnal value
we get a promise.
A promise represents a proxy for a value
not necessarily known
when the promise is created
Up until ES2015/ES6,
JS itself has actually
never had any direct notion of
asynchrony built into it
PROMISE
JS runs inside a hosting environment
(the browser/nodejs)
The event loop is handled by it
PROMISE
PROMISE
http://ecma-international.org/ecma-262/6.0/#sec-jobs-and-job-queues
PROMISE
//cart
function loadUserInfo() {
return new Promise((resolve, reject) => {
fetch(url, (err, userInf) => {
if (err) return reject(err)
return resolve(userInfo)
})
})
}
PROMISE
//cart
loadUserInfo()
.then(loadCartItems)
.then(retrieveExchangeRates)
.then(calculateTotal)
.catch((err) => {})
PROMISE
control ïŹ‚ow
PROMISE
control ïŹ‚ow
PROMISE
inversion of control
control ïŹ‚ow
PROMISE
inversion of control
control ïŹ‚ow
PROMISE
inversion of control
error handling
control ïŹ‚ow
PROMISE
inversion of control
error handling
control ïŹ‚ow
PROMISE
inversion of control
async or sync?
error handling
control ïŹ‚ow
PROMISE
inversion of control
async or sync?
error handling
control ïŹ‚ow
WIN!
BUT
..
PROMISE
loadMovieMetaData().then((data) => {
return parse(data).then((data) => {
return save(data)
})
})
PROMISE
loadMovieMetaData()
.then((data) => {
return parse(data)
})
.then((data) => {
return save(data)
})
PROMISE
loadMovieMetaData()
.then(parse)
.then(save)
.catch(...)
DON’T USE
PROMISE
FOR CONTROL FLOW
YOUR CODEBASE THEN
BECOMES
PROMISE DEPENDANT
TO PROMISE
OR
TO CALLBACK?
IF YOU HAVE A
LIBRARY, SUPPORT
BOTH
function foo(x, y, cb) {
return new Promise((resolve, reject) =>
fetch(url, (err, data) => {
if(err){
if(cb) cb(err)
return reject(err)
}
if(cb) cb(null, data)
return resolve(data)
}))
}
SINGLE VALUE
SINGLE RESOLUTION‹
IS NOT GOOD
FOR STREAMS
PERFORMANCE?
PERFORMANCE?
JS unlike a lot of other languages
never blocks
handling I/O is typically performed
via events and callbacks
function getTotal() {
let total = 0
try {
const userInfo = loadUserInfo()
const cartItems = loadCartItems()
const exr = retrieveExchangeRates()
total = calculateTotal(userInfo, cartItems, exr)
} catch (error) {
}
return total
}
GENERATOR
GENERATOR
a new type of function
that does’t not behave with the
run-to-completion behaviour
GENERATOR
function *foo(){
let x = 1
yield
return x
}
GENERATOR
function *foo(){
let x = 1
yield
return x
}
const g = foo()
let n = g.next()
console.log(n)
// {value: undefined, done: false}
n = g.next()
console.log(n)
// {value: 1, done: true}
GENERATOR
function *foo(){
let x = 1
yield
return x
}
const g = foo()
let n = g.next()
console.log(n)
// {value: undefined, done: false}
n = g.next()
console.log(n)
// {value: 1, done: true}
GENERATOR
function *foo(){
let x = 1
yield
return x
}
const g = foo()
let n = g.next()
console.log(n)
// {value: undefined, done: false}
n = g.next()
console.log(n)
// {value: 1, done: true}
GENERATOR
function *foo(){
let x = 1
yield
return x
}
const g = foo()
let n = g.next()
console.log(n)
// {value: undefined, done: false}
n = g.next()
console.log(n)
// {value: 1, done: true}
with yield
we are
pausing
A.K.A “BLOCKING””
GENERATOR
iterator is just one side
GENERATOR
the other side is an “observable”
GENERATOR
function *bar(){
let x = 14
let y = yield * x
return y
}
GENERATOR
function *bar(){
let x = 14
let y = yield * x
return y
}
GENERATOR
function *bar(){
let x = 14
let y = yield * x
return y
}
const g = bar()
let n = g.next()
console.log(n)
//{value: undefined, done: false}
n = g.next(3)
console.log(n)
//{value: 42, done: true}
function *bar(){
let x = 14
let y = yield * x
return y
}
GENERATOR
const g = bar()
let n = g.next()
console.log(n)
//{value: undefined, done: false}
n = g.next(3)
console.log(n)
//{value: 42, done: true}
function *bar(){
let x = 14
let y = yield * x
return y
}
GENERATOR
const g = bar()
let n = g.next()
console.log(n)
//{value: undefined, done: false}
n = g.next(3)
console.log(n)
//{value: 42, done: true}
function *bar(){
let x = 14
let y = yield * x
return y
}
GENERATOR
const g = bar()
let n = g.next()
console.log(n)
//{value: undefined, done: false}
n = g.next(3)
console.log(n)
//{value: 42, done: true}
we are pulling
we are pushing
what if waiting
was easy as
blocking
GENERATOR + PROMISE
the iterator should listen for the promise to
resolve (or reject)
then either resume the generator with the
fulfilment message
or throw an error into the generator with
the rejection reason)
GENERATOR + PROMISE
function *getTotal() {
let total = 0
try {
const userInfo = yield loadUserInfo()
const cartItems = yield loadCartItems()
const exr = yield retrieveExchangeRates()
total = calculateTotal(userInfo, cartItems, exr)
} catch (error) {
}
return total
}
GENERATOR + PROMISE
npm install co
GENERATOR + PROMISE
co(getTotal)
ASYNC/AWAIT
ASYNC/AWAIT
async function getTotal() {
let total = 0
try {
const userInfo = await loadUserInfo()
const cartItems = await loadCartItems()
const exr = await retrieveExchangeRates()
total = calculateTotal(userInfo, cartItems, exr)
} catch (error) {
}
return total
}
JS unlike a lot of other languages
never blocks
handling I/O is typically performed
via events and callbacks
function getTotal() {
let total = 0
try {
const userInfo = loadUserInfo()
const cartItems = loadCartItems()
const exr = retrieveExchangeRates()
total = calculateTotal(userInfo, cartItems, exr)
} catch (error) {
}
return total
}
is async/await
the answer to all
our async issues?
CHOOSE
YOUR
WAY
“Any fool can write code that a computer can
understand.
Good programmers write code that humans can
understand.”
Martin Fowler
Kyle Simpson @getify
github.com/getify/You-Dont-Know-JS
@cirpo
THANK YOU!

Weitere Àhnliche Inhalte

Was ist angesagt?

History of jQuery
History of jQueryHistory of jQuery
History of jQueryjeresig
 
UI ëȘšë“ˆí™”ëĄœ 워띌밞 지킀Ʞ
UI ëȘšë“ˆí™”ëĄœ 워띌밞 지킀ꞰUI ëȘšë“ˆí™”ëĄœ 워띌밞 지킀Ʞ
UI ëȘšë“ˆí™”ëĄœ 워띌밞 지킀ꞰNAVER SHOPPING
 
Redux Sagas - React Alicante
Redux Sagas - React AlicanteRedux Sagas - React Alicante
Redux Sagas - React AlicanteIgnacio MartĂ­n
 
The Beauty Of Java Script V5a
The Beauty Of Java Script V5aThe Beauty Of Java Script V5a
The Beauty Of Java Script V5arajivmordani
 
JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the ASTJarrod Overson
 
Get started with YUI
Get started with YUIGet started with YUI
Get started with YUIAdam Lu
 
ES2015 workflows
ES2015 workflowsES2015 workflows
ES2015 workflowsJarrod Overson
 
The Beauty of Java Script
The Beauty of Java ScriptThe Beauty of Java Script
The Beauty of Java ScriptMichael Girouard
 
meet.js - QooXDoo
meet.js - QooXDoomeet.js - QooXDoo
meet.js - QooXDooRadek Benkel
 
The evolution of redux action creators
The evolution of redux action creatorsThe evolution of redux action creators
The evolution of redux action creatorsGeorge Bukhanov
 
The redux saga begins
The redux saga beginsThe redux saga begins
The redux saga beginsDaniel Franz
 
Redux saga: managing your side effects. Also: generators in es6
Redux saga: managing your side effects. Also: generators in es6Redux saga: managing your side effects. Also: generators in es6
Redux saga: managing your side effects. Also: generators in es6Ignacio MartĂ­n
 
Intro to Reactive Programming with Swift
Intro to Reactive Programming with SwiftIntro to Reactive Programming with Swift
Intro to Reactive Programming with Swiftxw92
 
Standford 2015 week4: 1.Protocols and Delegation, Gestures 2. Multiple MVCs
Standford 2015 week4: 1.Protocols and Delegation, Gestures 2. Multiple MVCsStandford 2015 week4: 1.Protocols and Delegation, Gestures 2. Multiple MVCs
Standford 2015 week4: 1.Protocols and Delegation, Gestures 2. Multiple MVCsćœŒćŸ—æœ˜ Pan
 
rx.js make async programming simpler
rx.js make async programming simplerrx.js make async programming simpler
rx.js make async programming simplerAlexander Mostovenko
 
Standford 2015 week3: Objective-C Compatibility, Property List, Views
Standford 2015 week3: Objective-C Compatibility, Property List, ViewsStandford 2015 week3: Objective-C Compatibility, Property List, Views
Standford 2015 week3: Objective-C Compatibility, Property List, ViewsćœŒćŸ—æœ˜ Pan
 
FrontendLab: Programming UI with FRP and Bacon js - Đ’ŃŃ‡Đ”ŃĐ»Đ°ĐČ Đ’ĐŸŃ€ĐŸĐœŃ‡ŃƒĐș
FrontendLab: Programming UI with FRP and Bacon js - Đ’ŃŃ‡Đ”ŃĐ»Đ°ĐČ Đ’ĐŸŃ€ĐŸĐœŃ‡ŃƒĐșFrontendLab: Programming UI with FRP and Bacon js - Đ’ŃŃ‡Đ”ŃĐ»Đ°ĐČ Đ’ĐŸŃ€ĐŸĐœŃ‡ŃƒĐș
FrontendLab: Programming UI with FRP and Bacon js - Đ’ŃŃ‡Đ”ŃĐ»Đ°ĐČ Đ’ĐŸŃ€ĐŸĐœŃ‡ŃƒĐșGeeksLab Odessa
 

Was ist angesagt? (20)

History of jQuery
History of jQueryHistory of jQuery
History of jQuery
 
Deferred
DeferredDeferred
Deferred
 
UI ëȘšë“ˆí™”ëĄœ 워띌밞 지킀Ʞ
UI ëȘšë“ˆí™”ëĄœ 워띌밞 지킀ꞰUI ëȘšë“ˆí™”ëĄœ 워띌밞 지킀Ʞ
UI ëȘšë“ˆí™”ëĄœ 워띌밞 지킀Ʞ
 
Redux Sagas - React Alicante
Redux Sagas - React AlicanteRedux Sagas - React Alicante
Redux Sagas - React Alicante
 
The Beauty Of Java Script V5a
The Beauty Of Java Script V5aThe Beauty Of Java Script V5a
The Beauty Of Java Script V5a
 
JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the AST
 
Get started with YUI
Get started with YUIGet started with YUI
Get started with YUI
 
ES2015 workflows
ES2015 workflowsES2015 workflows
ES2015 workflows
 
The Beauty of Java Script
The Beauty of Java ScriptThe Beauty of Java Script
The Beauty of Java Script
 
meet.js - QooXDoo
meet.js - QooXDoomeet.js - QooXDoo
meet.js - QooXDoo
 
The evolution of redux action creators
The evolution of redux action creatorsThe evolution of redux action creators
The evolution of redux action creators
 
The redux saga begins
The redux saga beginsThe redux saga begins
The redux saga begins
 
Rxjs kyivjs 2015
Rxjs kyivjs 2015Rxjs kyivjs 2015
Rxjs kyivjs 2015
 
Redux saga: managing your side effects. Also: generators in es6
Redux saga: managing your side effects. Also: generators in es6Redux saga: managing your side effects. Also: generators in es6
Redux saga: managing your side effects. Also: generators in es6
 
Intro to Reactive Programming with Swift
Intro to Reactive Programming with SwiftIntro to Reactive Programming with Swift
Intro to Reactive Programming with Swift
 
Developing iOS apps with Swift
Developing iOS apps with SwiftDeveloping iOS apps with Swift
Developing iOS apps with Swift
 
Standford 2015 week4: 1.Protocols and Delegation, Gestures 2. Multiple MVCs
Standford 2015 week4: 1.Protocols and Delegation, Gestures 2. Multiple MVCsStandford 2015 week4: 1.Protocols and Delegation, Gestures 2. Multiple MVCs
Standford 2015 week4: 1.Protocols and Delegation, Gestures 2. Multiple MVCs
 
rx.js make async programming simpler
rx.js make async programming simplerrx.js make async programming simpler
rx.js make async programming simpler
 
Standford 2015 week3: Objective-C Compatibility, Property List, Views
Standford 2015 week3: Objective-C Compatibility, Property List, ViewsStandford 2015 week3: Objective-C Compatibility, Property List, Views
Standford 2015 week3: Objective-C Compatibility, Property List, Views
 
FrontendLab: Programming UI with FRP and Bacon js - Đ’ŃŃ‡Đ”ŃĐ»Đ°ĐČ Đ’ĐŸŃ€ĐŸĐœŃ‡ŃƒĐș
FrontendLab: Programming UI with FRP and Bacon js - Đ’ŃŃ‡Đ”ŃĐ»Đ°ĐČ Đ’ĐŸŃ€ĐŸĐœŃ‡ŃƒĐșFrontendLab: Programming UI with FRP and Bacon js - Đ’ŃŃ‡Đ”ŃĐ»Đ°ĐČ Đ’ĐŸŃ€ĐŸĐœŃ‡ŃƒĐș
FrontendLab: Programming UI with FRP and Bacon js - Đ’ŃŃ‡Đ”ŃĐ»Đ°ĐČ Đ’ĐŸŃ€ĐŸĐœŃ‡ŃƒĐș
 

Ähnlich wie The evolution of asynchronous JavaScript

Chaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreChaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreNicolas Carlo
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptjnewmanux
 
Akka Futures and Akka Remoting
Akka Futures  and Akka RemotingAkka Futures  and Akka Remoting
Akka Futures and Akka RemotingKnoldus Inc.
 
The Strange World of Javascript and all its little Asynchronous Beasts
The Strange World of Javascript and all its little Asynchronous BeastsThe Strange World of Javascript and all its little Asynchronous Beasts
The Strange World of Javascript and all its little Asynchronous BeastsFederico Galassi
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome PartsDomenic Denicola
 
Async js - Nemetschek Presentaion @ HackBulgaria
Async js - Nemetschek Presentaion @ HackBulgariaAsync js - Nemetschek Presentaion @ HackBulgaria
Async js - Nemetschek Presentaion @ HackBulgariaHackBulgaria
 
From Node.js to Design Patterns - BuildPiper
From Node.js to Design Patterns - BuildPiperFrom Node.js to Design Patterns - BuildPiper
From Node.js to Design Patterns - BuildPiperLuciano Mammino
 
You promise?
You promise?You promise?
You promise?IT Weekend
 
Droidjam 2019 flutter isolates pdf
Droidjam 2019 flutter isolates pdfDroidjam 2019 flutter isolates pdf
Droidjam 2019 flutter isolates pdfAnvith Bhat
 
Promises, promises, and then observables
Promises, promises, and then observablesPromises, promises, and then observables
Promises, promises, and then observablesStefan Charsley
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous JavascriptGarrett Welson
 
Javascript & Ajax Basics
Javascript & Ajax BasicsJavascript & Ajax Basics
Javascript & Ajax BasicsRichard Paul
 
Chaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscoreChaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscoreNicolas Carlo
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Domenic Denicola
 
Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016Codemotion
 
JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...
JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...
JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...Doug Jones
 
Andrii Orlov "Generators Flexibility in Modern Code"
Andrii Orlov "Generators Flexibility in Modern Code"Andrii Orlov "Generators Flexibility in Modern Code"
Andrii Orlov "Generators Flexibility in Modern Code"LogeekNightUkraine
 

Ähnlich wie The evolution of asynchronous JavaScript (20)

Chaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreChaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscore
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScript
 
Akka Futures and Akka Remoting
Akka Futures  and Akka RemotingAkka Futures  and Akka Remoting
Akka Futures and Akka Remoting
 
The Strange World of Javascript and all its little Asynchronous Beasts
The Strange World of Javascript and all its little Asynchronous BeastsThe Strange World of Javascript and all its little Asynchronous Beasts
The Strange World of Javascript and all its little Asynchronous Beasts
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
Async js - Nemetschek Presentaion @ HackBulgaria
Async js - Nemetschek Presentaion @ HackBulgariaAsync js - Nemetschek Presentaion @ HackBulgaria
Async js - Nemetschek Presentaion @ HackBulgaria
 
From Node.js to Design Patterns - BuildPiper
From Node.js to Design Patterns - BuildPiperFrom Node.js to Design Patterns - BuildPiper
From Node.js to Design Patterns - BuildPiper
 
You promise?
You promise?You promise?
You promise?
 
Droidjam 2019 flutter isolates pdf
Droidjam 2019 flutter isolates pdfDroidjam 2019 flutter isolates pdf
Droidjam 2019 flutter isolates pdf
 
Promises, promises, and then observables
Promises, promises, and then observablesPromises, promises, and then observables
Promises, promises, and then observables
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
Javascript & Ajax Basics
Javascript & Ajax BasicsJavascript & Ajax Basics
Javascript & Ajax Basics
 
Chaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscoreChaining et composition de fonctions avec lodash / underscore
Chaining et composition de fonctions avec lodash / underscore
 
JavaScript Core
JavaScript CoreJavaScript Core
JavaScript Core
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
 
Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016
 
JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...
JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...
JavaScript: The Good Parts Or: How A C# Developer Learned To Stop Worrying An...
 
Async Frontiers
Async FrontiersAsync Frontiers
Async Frontiers
 
Andrii Orlov "Generators Flexibility in Modern Code"
Andrii Orlov "Generators Flexibility in Modern Code"Andrii Orlov "Generators Flexibility in Modern Code"
Andrii Orlov "Generators Flexibility in Modern Code"
 
ES6 Overview
ES6 OverviewES6 Overview
ES6 Overview
 

Mehr von Alessandro Cinelli (cirpo)

The journey to become a solid developer
The journey to become a solid developer The journey to become a solid developer
The journey to become a solid developer Alessandro Cinelli (cirpo)
 
The evolution of asynchronous javascript
The evolution of asynchronous javascriptThe evolution of asynchronous javascript
The evolution of asynchronous javascriptAlessandro Cinelli (cirpo)
 
PHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolPHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolAlessandro Cinelli (cirpo)
 
Apt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stageApt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stageAlessandro Cinelli (cirpo)
 
PHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the foolPHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the foolAlessandro Cinelli (cirpo)
 
Don't screw it up! How to build durable API
Don't screw it up! How to build durable API Don't screw it up! How to build durable API
Don't screw it up! How to build durable API Alessandro Cinelli (cirpo)
 
PHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the foolPHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the foolAlessandro Cinelli (cirpo)
 
Don't screw it up: how to build durable web apis
Don't screw it up: how to build durable web apisDon't screw it up: how to build durable web apis
Don't screw it up: how to build durable web apisAlessandro Cinelli (cirpo)
 
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....Alessandro Cinelli (cirpo)
 
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...Alessandro Cinelli (cirpo)
 

Mehr von Alessandro Cinelli (cirpo) (18)

Dear JavaScript
Dear JavaScriptDear JavaScript
Dear JavaScript
 
The journey to become a solid developer
The journey to become a solid developer The journey to become a solid developer
The journey to become a solid developer
 
The evolution of asynchronous javascript
The evolution of asynchronous javascriptThe evolution of asynchronous javascript
The evolution of asynchronous javascript
 
PHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolPHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the fool
 
Apt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stageApt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stage
 
PHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the foolPHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the fool
 
Don't screw it up! How to build durable API
Don't screw it up! How to build durable API Don't screw it up! How to build durable API
Don't screw it up! How to build durable API
 
PHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the foolPHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the fool
 
Don't screw it up: how to build durable web apis
Don't screw it up: how to build durable web apisDon't screw it up: how to build durable web apis
Don't screw it up: how to build durable web apis
 
Nodejsconf 2012 - opening
Nodejsconf 2012 - openingNodejsconf 2012 - opening
Nodejsconf 2012 - opening
 
Symfonyday Keynote
Symfonyday KeynoteSymfonyday Keynote
Symfonyday Keynote
 
Introduzione a GIT - Webinar Zend
Introduzione a GIT - Webinar ZendIntroduzione a GIT - Webinar Zend
Introduzione a GIT - Webinar Zend
 
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
 
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
 
Symfony2 and Ror3 friends for an hour
Symfony2 and Ror3 friends for an hourSymfony2 and Ror3 friends for an hour
Symfony2 and Ror3 friends for an hour
 
Git e Git Flow
Git e Git Flow Git e Git Flow
Git e Git Flow
 
Presentazione framework Symfony
Presentazione framework Symfony Presentazione framework Symfony
Presentazione framework Symfony
 
Web 2.0 sviluppare e ottimizzare oggi
Web 2.0 sviluppare e ottimizzare oggiWeb 2.0 sviluppare e ottimizzare oggi
Web 2.0 sviluppare e ottimizzare oggi
 

KĂŒrzlich hochgeladen

Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 

KĂŒrzlich hochgeladen (20)

Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 

The evolution of asynchronous JavaScript