Process control nodejs

Preview:

Citation preview

Process Control - NodejsJason

Agenda● State Machine

● Promise

● Generator

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

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');

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');

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

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);

…….. }); });

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

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

});

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

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);});

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.

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

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

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.

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); });

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 .

Generatorfunction* gen(){

console.log('one');yield;

console.log('two');yield;

console.log('tree');yield;

}

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

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 }

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);

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);});

ReferenceECMAScript 6

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

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

Global_Objects/Promise