asynchronous javascript and promises
DESCRIPTION
Presentation on how JavaScript is Asynchronous and how to write async code using PromisesTRANSCRIPT
![Page 1: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/1.jpg)
Async JavaScript and
Promises
Sunday, 25 August 13
![Page 2: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/2.jpg)
Callbacks
console.log("Before readFile");fs.readFile("file1.txt", function(file1Content) { console.log("File Contents here"); return "#" + file1Content + "#";});console.log("After readFile");
Functions are first class citizens in JavaScriptFunctions can takes functions as argument and call
them when they are done
Sunday, 25 August 13
![Page 3: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/3.jpg)
Callbacks
console.log("Before readFile");fs.readFile("file1.txt", function(file1Content) { console.log("File Contents here"); return "#" + file1Content + "#";});console.log("After readFile");
Functions are first class citizens in JavaScriptFunctions can takes functions as argument and call
them when they are done
Sunday, 25 August 13
![Page 4: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/4.jpg)
Is JavaScript really Async?
All of the JavaScript engines including V8 are single-threaded
But all I/O is evented and asynchronous
It is possible via the EventLoop
Sunday, 25 August 13
![Page 5: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/5.jpg)
An entity that handles and processes external events and converts them into callback invocations
Every asynchronous operation adds itself to the EventLoop
Event Loops
Sunday, 25 August 13
![Page 6: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/6.jpg)
How EventLoop works?
Sunday, 25 August 13
![Page 7: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/7.jpg)
Event Loop
Sunday, 25 August 13
![Page 8: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/8.jpg)
Making Code Asynchronous
setImmediate
process.nextTick
setTimeout / setInterval
Sunday, 25 August 13
![Page 9: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/9.jpg)
Promises
A Promise is an object that represents a one-time event, typically the outcome of an async task like an AJAX call.
At first, a Promise is in a pending state. Eventually, it’s either resolved or rejected.
Once a Promise is resolved or rejected, it’ll remain in that state forever, and its callbacks will never fire again.
Sunday, 25 August 13
![Page 10: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/10.jpg)
What are Promises For?
Sunday, 25 August 13
![Page 11: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/11.jpg)
Callback Hell
step1(function (value1) { step2(value1, function(value2) { step3(value2, function(value3) { step4(value3, function(value4) { // Do something with value4 }); }); });});
Q.fcall(promisedStep1).then(promisedStep2).then(promisedStep3).then(promisedStep4).then(function (value4) { // Do something with value4}).done();
Promises can solve the problem of “Callback Hell”
Sunday, 25 August 13
![Page 12: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/12.jpg)
Handling exceptionsPromises also helps you handle exceptions in a cleaner way
var handleError = console.log;
step1(function (value1) { step2(value1, function(value2) { step3(value2, function(value3) { step4(value3, function(value4) { // Do something with value4 }, handleError); }, handleError); }, handleError);}, handleError);
Q.fcall(promisedStep1).then(promisedStep2).then(promisedStep3).then(promisedStep4).then(function(value4) { // Do something with value4}).fail(function(error) { // Handle any error from all above steps}).done();
Sunday, 25 August 13
![Page 13: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/13.jpg)
It makes the code Async
Q adds the functions in the chain to the Event loop
When the promised function returns, the promises are rejected/resolved during the next pass of the runloop
Sunday, 25 August 13
![Page 14: Asynchronous JavaScript and Promises](https://reader031.vdocuments.us/reader031/viewer/2022020306/554a0ee8b4c9055c598b4965/html5/thumbnails/14.jpg)
Thank you
Code snippets used for the demo can be downloaded from https://gist.github.com/senthilkumarv/6326192
Contact at [email protected] and [email protected]
Sunday, 25 August 13