19
Process Control - Nodejs Jason

Process control nodejs

Embed Size (px)

Citation preview

Page 1: Process control nodejs

Process Control - NodejsJason

Page 2: Process control nodejs

Agenda● State Machine

● Promise

● Generator

Page 3: Process control nodejs

State Machine● EventEmitter provides multiple properties like on and emit.

● on property is used to bind a function with the event

● emit is used to fire an event

Page 4: Process control nodejs

State Machinevar events = require('events');var stateMachine = new events.EventEmitter();

stateMachine.on('task1', ()=>{ console.log('Task 1');});

stateMachine.on('task2', ()=>{ console.log('Task 2');});

stateMachine.emit('task1');stateMachine.emit('task2');

Page 5: Process control nodejs

State Machinevar events = require('events');var workflow = new events.EventEmitter();

workflow.on('task1', ()=>{ console.log('Task 1'); workflow.emit('task2');});

workflow.on('task2', ()=>{ console.log('Task 2');});

workflow.emit('task1');

Page 6: Process control nodejs

PromiseThe Promise object is used for deferred and asynchronous computations.

pending: initial state, not fulfilled or rejected.

fulfilled: meaning that the operation completed successfully.

rejected: meaning that the operation failed.

1.pending → fulfilled

2. pending → rejected

Page 7: Process control nodejs

callback hellvar fs = require('fs');fs.readFile('test.txt', 'utf8', (err, data) => { if(err) throw err; console.log(data); fs.readFile('test2.txt', 'utf8', (err1, data1) => { if(err1) throw err1; console.log(data1);

…….. }); });

Page 8: Process control nodejs

Promisevar promise = new Promise((resolve, reject) => {

if (......){ resolve(value); } else { reject(error); }

});

promise.then(function(value) { // success}, function(error) { // failure});

Page 9: Process control nodejs

Promisevar fs = require('fs');function promiseReadFile(fileName){ return new Promise((resolve, reject) => { fs.readFile(fileName, 'utf8', (err, data) => { if(err){ reject(err); }else{ resolve(data); } }); });}

promiseReadFile('test.txt').then((value) => { console.log(value); return promiseReadFile('test2.txt')}).then((value) => { console.log(value);});

Page 10: Process control nodejs

Promise.allThe Promise.all(iterable) method returns a promise that resolves when all of the promises in the iterable argument have resolved, or rejects with the reason of the first passed promise that rejects.

Page 11: Process control nodejs

Promise.alllet p1 = promiseReadFile('test.txt');let p2 = promiseReadFile('test2.txt');

Promise.all([p1, p2]).then((result)=>{ console.log(result); //[“p1-result”, “p2-result”]});

Page 12: Process control nodejs

Promise.raceThe Promise.race(iterable) method returns a promise that resolves or rejects as soon as one of the promises in the iterable resolves or rejects, with the value or reason from that promise.

Page 13: Process control nodejs

Promise.racelet p1 = promiseReadFile('test.txt');let p2 = new Promise((resolve, reject) => { setTimeout(() => reject(new Error('error')), 3000); });

Promise.race([p1, p2]).then((result) =>{ console.log(result); });

Page 14: Process control nodejs

Generator● The function* declaration (function keyword followed by an asterisk) defines a

generator function, which returns a Generator object.

● The yield keyword is used to pause and resume a generator function .

Page 15: Process control nodejs

Generatorfunction* gen(){

console.log('one');yield;

console.log('two');yield;

console.log('tree');yield;

}

var g = gen();g.next(); // oneg.next(); // twog.next(); // three

Page 16: Process control nodejs

Generatorfunction* helloWorldGenerator() { yield 'hello'; yield 'world'; return 'ending';}

var hw = helloWorldGenerator();

hw.next();// { value: 'hello', done: false }

hw.next();// { value: 'world', done: false }

hw.next();// { value: 'ending', done: true }

hw.next();// { value: undefined, done: true }

Page 17: Process control nodejs

Generatorfunction* gen(){

var x = yield 0;x++;yield x;

}

var g = gen();var first = g.next();console.log(first.value);

var second = g.next(first.value);console.log(second.value);

Page 18: Process control nodejs

Generatorvar fetch = require('node-fetch');

function* gen(){ var url = '......';

var result = yield fetch(url);console.log(result[0].SiteName);

}

var g = gen();var result = g.next();

result.value.then(function(data){ return data.json();}).then(function(data){ g.next(data);});

Page 19: Process control nodejs

ReferenceECMAScript 6

http://es6.ruanyifeng.com/#docs/async

MDNhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/

Global_Objects/Promise