node - usmanlive.comasynchronous its not concurrent multi threaded it is just a function scheduled...

17
NODE ASYNCHRONOUS JAVASCRIPT

Upload: others

Post on 03-Jun-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

NODEASYNCHRONOUS JAVASCRIPT

Page 2: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Problemconsole.log("Before...");

setTimeout(function () {

console.log("Reading a user from DB");

}, 2000);

console.log("After...");

// Whats the output

Usman Akram CUI LAHORE 2

Page 3: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Output of ProblemBefore...

After...

Reading a user from DB

Usman Akram CUI LAHORE 3

Page 4: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

ASynchronousIts not◦Concurrent

◦Multi Threaded

It is◦ Just a function scheduled to be called in future

Usman Akram CUI LAHORE 4

Page 5: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Outputconsole.log("Before");

const user = getUser();

console.log(user);

console.log("After");

//Output

//Before

//dummy

//After

//DB Query entertained

function getUser(){

setTimeout(function(){

console.log('DB Query entertained');

return {id:9,name:'usman'}

},1000);

return "dummy";

}

Usman Akram CUI LAHORE 5

Page 6: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Patterns for Dealing with Asynchronous CodeCallback

Promises

Async/await

Usman Akram CUI LAHORE 6

Page 7: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

CallBackfunction getUser(id, callback) {

setTimeout(function () {

console.log("Reading User");

callback({ id: id, name: "Usman" });

}, 2000)

}

Usman Akram CUI LAHORE 7

Page 8: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

CallBackconsole.log("Before");

getUser(1, function (userObj) {

console.log("Received User");

console.log(userObj);

});

console.log("After");

Usman Akram CUI LAHORE 8

Page 9: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Imagine this (CallBack Hell)getUser(1, (user) => {

getRepositories(user.gitHubUsername, (repos) =>{

getCommits(repos[0], (commits) => {

console.log(commits);

})

})

});

//You can use named Functions but still NOOOOO

Usman Akram CUI LAHORE 9

Page 10: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Promiseconst p = new Promise(function(resolve,reject){

resolve({name:"hareem"});

reject(new Error("Hareem is naughty"));

});p.then((result)=>{

console.log(result.name);

});

p.catch((error)=>{console.log("Error Caught"+error.message)});

Usman Akram CUI LAHORE 10

Page 11: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Promiseconst p = new Promise((resolve, reject) => {

// Kick off some async work

// ...

setTimeout(() => {

resolve(1); // pending => resolved, fulfilled

reject(new Error('message')); //pending => rejected

}, 2000);

});

Usman Akram CUI LAHORE 11

Page 12: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Using Promisep.then(result => console.log('Result', result))

.catch(err => console.log('Error', err.message));

Usman Akram CUI LAHORE 12

Page 13: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Beauty in CodegetUser(1)

.then(user => getRepositories(user.gitHubUsername))

.then(repos => getCommits(repos[0]))

.then(commits => console.log('Commits', commits))

.catch(err => console.log('Error', err.message));

Usman Akram CUI LAHORE 13

Page 14: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Async and Await approachasync function displayCommits() {

try {

const user = await getUser(1);

const repos = await getRepositories(user.gitHubUsername);

const commits = await getCommits(repos[0]);

console.log(commits);

}

catch (err) {

console.log('Error', err.message);

}

}

Usman Akram CUI LAHORE 14

Page 15: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Resolved Promises (For Testing)Promise.reolve(1);

Promise.reject(new Error(''));

Usman Akram CUI LAHORE 15

Page 16: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Running Promses in parallelPromise.all([p1, p2]);// When all promises are resolved

Promise.race([p1, p2]);// When any one finished first

Usman Akram CUI LAHORE 16

Page 17: NODE - usmanlive.comASynchronous Its not Concurrent Multi Threaded It is Just a function scheduled to be called in future Usman Akram CUI LAHORE 4

Sample Codehttps://1drv.ms/f/s!AtGKdbMmNBGd0V1N14IfBGU1Npoi

Usman Akram CUI LAHORE 17