From 064bf07bdf3a1adad1881f9e31b5621a6d780d54 Mon Sep 17 00:00:00 2001 From: pamepeixinho Date: Fri, 7 Dec 2018 06:53:01 -0200 Subject: [PATCH 1/5] add observers --- Nodejs/observers/MyFancyObservable.js | 38 +++++++++++++++++++++++++++ Nodejs/observers/testing.js | 14 ++++++++++ 2 files changed, 52 insertions(+) create mode 100644 Nodejs/observers/MyFancyObservable.js create mode 100644 Nodejs/observers/testing.js diff --git a/Nodejs/observers/MyFancyObservable.js b/Nodejs/observers/MyFancyObservable.js new file mode 100644 index 0000000..d916e0f --- /dev/null +++ b/Nodejs/observers/MyFancyObservable.js @@ -0,0 +1,38 @@ +// MyFancyObservable.js + +// Reference from: https://blog.risingstack.com/fundamental-node-js-design-patterns/ + +// var util = require('util'); +// var EventEmitter = require('events').EventEmitter; + +// function MyFancyObservable() { +// EventEmitter.call(this); +// } + +// util.inherits(MyFancyObservable, EventEmitter); + +// MyFancyObservable.prototype.hello = function (name) { +// this.emit('hello', name); +// }; + +// --------------- + +// Code improved +var EventEmitter = require('events').EventEmitter; + +class MyFancyObservable extends EventEmitter { + constructor() { + super(); + EventEmitter.call(this); + } + + hello(name) { + this.emit('hello', name); + } + + writeInAgenda() { + this.emit('write-firestore-agents-agenda', { visit: { code: '989' }}); + } +} + +module.exports = MyFancyObservable; diff --git a/Nodejs/observers/testing.js b/Nodejs/observers/testing.js new file mode 100644 index 0000000..046b68e --- /dev/null +++ b/Nodejs/observers/testing.js @@ -0,0 +1,14 @@ +var MyFancyObservable = require('./MyFancyObservable'); +var observable = new MyFancyObservable(); + +observable.on('hello', console.log); + +observable.hello('john'); + +observable.on('write-firestore-agents-agenda', (newVisit) => { + // do some stuff + console.log('write-firestore-agents-agenda', newVisit); +}); + + +observable.writeInAgenda(); From d071215e243300d497d00d76ae29a825ebedf85c Mon Sep 17 00:00:00 2001 From: pamepeixinho Date: Fri, 7 Dec 2018 07:31:45 -0200 Subject: [PATCH 2/5] add factory and put async wait to emit --- Nodejs/Factory/factory.js | 10 ++++++++++ Nodejs/observers/testing.js | 16 ++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 Nodejs/Factory/factory.js diff --git a/Nodejs/Factory/factory.js b/Nodejs/Factory/factory.js new file mode 100644 index 0000000..1c8be93 --- /dev/null +++ b/Nodejs/Factory/factory.js @@ -0,0 +1,10 @@ +function MyClass (options) { + this.options = options; +} + +function create(options) { + // modify the options here if you want + return new MyClass(options); +} + +module.exports.create = create; diff --git a/Nodejs/observers/testing.js b/Nodejs/observers/testing.js index 046b68e..b31f943 100644 --- a/Nodejs/observers/testing.js +++ b/Nodejs/observers/testing.js @@ -1,14 +1,22 @@ var MyFancyObservable = require('./MyFancyObservable'); var observable = new MyFancyObservable(); -observable.on('hello', console.log); +observable.on('hello', (name) => { + console.log(name, new Date().toString()) +}); -observable.hello('john'); observable.on('write-firestore-agents-agenda', (newVisit) => { // do some stuff - console.log('write-firestore-agents-agenda', newVisit); + console.log('write-firestore-agents-agenda', new Date().toString()); }); +// observable.hello('john'); +// observable.writeInAgenda(); + +const SayHello = () => Promise.resolve(observable.hello('john')) +const WriteAgenda = () => Promise.resolve(observable.writeInAgenda()) + + +const promises = Promise.all([SayHello(), WriteAgenda()]) -observable.writeInAgenda(); From 5d0dd84bf73649d953785cfa8f6b5513fb9a636c Mon Sep 17 00:00:00 2001 From: pamepeixinho Date: Fri, 7 Dec 2018 07:44:02 -0200 Subject: [PATCH 3/5] add factory and put async wait to emit --- Nodejs/observers/testing.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Nodejs/observers/testing.js b/Nodejs/observers/testing.js index b31f943..ecf55e8 100644 --- a/Nodejs/observers/testing.js +++ b/Nodejs/observers/testing.js @@ -2,7 +2,9 @@ var MyFancyObservable = require('./MyFancyObservable'); var observable = new MyFancyObservable(); observable.on('hello', (name) => { - console.log(name, new Date().toString()) + setTimeout(() => { + console.log(name, new Date().toString()) + }, 300) }); From 526d4c49b6bc833edf87446f06422e5c24026c49 Mon Sep 17 00:00:00 2001 From: pamepeixinho Date: Fri, 7 Dec 2018 07:44:46 -0200 Subject: [PATCH 4/5] event emitter is synchronous --- Nodejs/observers/testing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Nodejs/observers/testing.js b/Nodejs/observers/testing.js index ecf55e8..20ecdc1 100644 --- a/Nodejs/observers/testing.js +++ b/Nodejs/observers/testing.js @@ -4,7 +4,7 @@ var observable = new MyFancyObservable(); observable.on('hello', (name) => { setTimeout(() => { console.log(name, new Date().toString()) - }, 300) + }, 1000) }); From f3d4f8413b5e341d8963c810a5f269dc465152c7 Mon Sep 17 00:00:00 2001 From: pamepeixinho Date: Fri, 7 Dec 2018 07:47:26 -0200 Subject: [PATCH 5/5] event emitter is synchronous --- Nodejs/observers/testing.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Nodejs/observers/testing.js b/Nodejs/observers/testing.js index 20ecdc1..cf4aa7d 100644 --- a/Nodejs/observers/testing.js +++ b/Nodejs/observers/testing.js @@ -5,6 +5,8 @@ observable.on('hello', (name) => { setTimeout(() => { console.log(name, new Date().toString()) }, 1000) + + process.nextTick(); });