1// EventEmitter Simple
2const EventEmitter = require('events');
3class MyEmitter extends EventEmitter {}
4const myEmitter = new MyEmitter();
5myEmitter.on('event', () => {
6 console.log('an event occurred!');
7});
8myEmitter.emit('event');
9
10// Advanced Scenario
11// Note: EventEmitter is not asynchronous
12const EventEmitter = require('events');
13const fs = require('fs');
14
15class ExecutionFlow extends EventEmitter {
16 async execute(asyncFn, ...args) {
17 this.emit('begin');
18 try{
19 await asyncFn(...args, (err, data) => {
20 this.emit('data', data); // hook point
21 this.emit('end');
22 });
23 } catch(err){
24 this.emit('error', err);
25 }
26 }
27}
28const execFlow = new ExecutionFlow();
29
30// Attach listeners
31execFlow.on('begin', () => {
32 console.log('execution is being prepared');
33});
34execFlow.on('data', (data) => {
35 console.log(data);
36});
37execFlow.on('end', () => {
38 console.log('execution is now finished');
39});
40execFlow.on('error', (err) => {
41 console.log('error', err);
42 // send it to the message broker for tracking
43});
44
45// function asyncFn(file) {
46// return new Promise(function (resolve, reject) {
47// setTimeout(() => {
48// resolve('data');
49// }, 1000);
50// });
51// }
52
53execFlow.execute(fs.readFile, './numbers.txt','utf8');
54// execFlow.removeListener('data', fn);
55
56process.on('uncaughtException', (err) => {
57 // send it to the message broker for tracking
58 console.log('uncaughtException', err);
59 process.exit(1);
60});Created on 7/26/2017