NodeJS EventEmitter Sample Code

JS
S
JavaScript

Simple EventEmitter usage example using async await. Using: Node JS 8.2.1 Good to use for hook points allowing the extension of existing behaviour or to build plugins over an existing code.

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