Upload
learningtech
View
234
Download
0
Embed Size (px)
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