![Page 1: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/1.jpg)
Promises and chainingInto callback hell … back again
![Page 3: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/3.jpg)
![Page 4: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/4.jpg)
Intro: sync, async, callbacks
![Page 5: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/5.jpg)
Humans are multi-threaded!
![Page 6: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/6.jpg)
Browsers provide asynchrony*.
Javascript is single-threaded & synchronous.
![Page 7: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/7.jpg)
finish
a()b()c()
start
a()b()c()
![Page 8: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/8.jpg)
finish
a()b()c()
start
a()b()c()
b()a()c()
c()b()a()
c(),a()b() …
![Page 9: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/9.jpg)
sync async
![Page 10: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/10.jpg)
Why async?
![Page 11: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/11.jpg)
Synchronous flow, here? Bad idea!
![Page 12: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/12.jpg)
“Callbacks to the rescue!”
![Page 13: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/13.jpg)
“Call me back!”
![Page 14: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/14.jpg)
Use a callback! Way better!
![Page 15: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/15.jpg)
Got it!
![Page 16: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/16.jpg)
Callbacks in order?
a() b() c() d() e() f()
![Page 17: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/17.jpg)
![Page 18: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/18.jpg)
“Pyramid of doom!”
![Page 19: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/19.jpg)
![Page 20: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/20.jpg)
“I am NOT going to debug that!”
![Page 21: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/21.jpg)
“Free ticket into callback hell!”
![Page 22: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/22.jpg)
![Page 23: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/23.jpg)
Core: Promises to the rescue
![Page 24: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/24.jpg)
My definition of a promise
“I hereby give you a promise that I will answer your question some time in the future … but not right now!”
![Page 25: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/25.jpg)
Promise
fulfilledrejected
settledpending
![Page 26: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/26.jpg)
Still experimental
kriskowal/q cujojs/when
WinJS.Promisetildeio/rsvp.js
![Page 27: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/27.jpg)
$q.defer()
![Page 28: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/28.jpg)
.then()
![Page 29: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/29.jpg)
.resolve() .reject()
![Page 30: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/30.jpg)
.then() in .then() in .then() …
![Page 31: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/31.jpg)
“I’ve seen that *$#%$* before …”
![Page 32: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/32.jpg)
Chaining
![Page 33: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/33.jpg)
“Wicked, Hans!”
![Page 34: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/34.jpg)
“And what about collecting results from multiple promises?”
![Page 35: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/35.jpg)
Combined results
$q.all()
![Page 36: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/36.jpg)
![Page 37: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/37.jpg)
“OK! Enough theory!”
![Page 38: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/38.jpg)
Get fancy: Demo Time!
![Page 39: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/39.jpg)
Outro: Questions?
![Page 40: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/40.jpg)
http://ejohn.org/blog/how-javascript-timers-work/
http://www.html5rocks.com/en/tutorials/async/deferred/
https://docs.angularjs.org/api/ng/service/$q
https://github.com/kriskowal/q
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
https://www.promisejs.org/
https://github.com/promises-aplus/promises-spec
![Page 41: Promises And Chaining In AngularJS - Into Callback Hell And Back Again](https://reader033.vdocuments.site/reader033/viewer/2022060120/5591cdce1a28abc3058b4653/html5/thumbnails/41.jpg)
“Thank you! Over & out!”