Asynchronous JavaScript and Promises
Upcoming SlideShare
Loading in...5
×
 

Asynchronous JavaScript and Promises

on

  • 928 views

Presentation on how JavaScript is Asynchronous and how to write async code using Promises

Presentation on how JavaScript is Asynchronous and how to write async code using Promises

Statistics

Views

Total Views
928
Views on SlideShare
928
Embed Views
0

Actions

Likes
4
Downloads
33
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Asynchronous JavaScript and Promises Asynchronous JavaScript and Promises Presentation Transcript

  • Async JavaScript and Promises Sunday, 25 August 13
  • 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 JavaScript Functions can takes functions as argument and call them when they are done Sunday, 25 August 13
  • 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 JavaScript Functions can takes functions as argument and call them when they are done Sunday, 25 August 13
  • 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
  • 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
  • How EventLoop works? Sunday, 25 August 13
  • Event Loop Sunday, 25 August 13
  • Making Code Asynchronous setImmediate process.nextTick setTimeout / setInterval Sunday, 25 August 13
  • 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
  • What are Promises For? Sunday, 25 August 13
  • 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
  • Handling exceptions Promises 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
  • 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
  • Thank you Code snippets used for the demo can be downloaded from https://gist.github.com/senthilkumarv/6326192 Contact at senthilkumar@thoughtworks.com and kuldeepg@thoughtworks.com Sunday, 25 August 13