From 3f28f00efdb97f097b0a84997b8257ec651a7541 Mon Sep 17 00:00:00 2001 From: Jeff Dederick Date: Wed, 1 Nov 2017 19:13:37 -0400 Subject: [PATCH 1/3] promises portion completed --- index.js | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 index.js diff --git a/index.js b/index.js new file mode 100644 index 0000000..806aca0 --- /dev/null +++ b/index.js @@ -0,0 +1,90 @@ +'use strict'; + +var hello = new Promise(function(resolve, reject) { + setTimeout(resolve('Hello Promise!'), 1000); +}); + +hello + .then(function(message) { + console.log(message); + }) + .catch(function(err) { + console.error(err); + }); + +let delay = function(milliseconds) { + return new Promise(function(resolve, reject) { + setTimeout(milliseconds); + if (milliseconds > 0) { + resolve(milliseconds); + } else { + reject('Done'); + } + }); +}; + +let countDown = function(result) { + if (result > 0) { + console.log(result); + return (result -= 100); + } else { + console.log('Done!'); + } +}; + +delay(1000) + .then(countDown) //=> 1000 + .then(countDown) //=> 900 + .then(countDown) //=> 800 + .then(countDown) //=> 700 + .then(countDown) //=> 600 + .then(countDown) //=> 500 + .then(countDown) //=> 400 + .then(countDown) //=> 300 + .then(countDown) //=> 200 + .then(countDown) //=> 100 + .then(countDown); //=> Done! + +let square = function(val) { + return new Promise(function(resolve, reject) { + if (val !== undefined && typeof val === 'number') { + resolve(Math.pow(val, 2)); + } else { + reject('No bueno'); + } + }); +}; + +let numArray = [1, 2, 3, 4, 5, 6, 7, 8, 9]; + +numArray = numArray.map(square); + +Promise.all(numArray).then(function(val) { + console.log(val); +}); + +let doBadThing = function(forRealz) { + return new Promise(function(resolve, reject) { + if (forRealz) { + reject('Booo'); + } else { + resolve('Yay'); + } + }); +}; + +doBadThing('jefe').then( + function(resolve) { + console.log(resolve); + }, + function(reject) { + throw reject; + } +); +doBadThing(21) + .then(function(result) { + console.log('!!' + result); + }) + .catch(function(err) { + console.error(err); + }); From 009d8fdd9b61bce78fc342a70902af09c8431b8d Mon Sep 17 00:00:00 2001 From: Jeff Dederick Date: Thu, 2 Nov 2017 12:25:44 -0400 Subject: [PATCH 2/3] project completed --- emit.js | 39 +++++++++++++++++++++++ fsp.js | 43 ++++++++++++++++++++++++++ index.js | 92 ++++++++++++++++++++++++++++++++++++------------------- lorem.txt | 1 + 4 files changed, 143 insertions(+), 32 deletions(-) create mode 100644 emit.js create mode 100644 fsp.js create mode 100644 lorem.txt diff --git a/emit.js b/emit.js new file mode 100644 index 0000000..945889f --- /dev/null +++ b/emit.js @@ -0,0 +1,39 @@ +let emitter = function() { + //I'm not even sure I need this..... + //or if this is within the 'events' module + this.evnts = {}; + + //attach an event listener with + this.on = (eventType, callback) => { + if (eventType) { + if (!Array.isArray(this.evnts[eventType])) { + this.evnts[eventType] = []; + } + } + this.evnts[eventType].push(callback); + }; + //attach subsequent listeners with emitter.on + + //Emit an event with + this.emit = eventType => this.evnts[eventType].forEach(val => val.call()); + //This should result in all listeners attached + //to that event being invoked + + //Remove a listener + this.removeListener = (eventType, callback) => { + this.evnts[eventType].forEach(val => { + if (val === callback) { + this.evnts[eventType].splice(val, 1); + console.log('Listener deleted'); + } + }); + }; + + //Remove all listeners on an event + this.removeAllListeners = eventType => { + delete this.evnts[eventType]; + console.log('All listeners deleted'); + }; +}; + +module.exports = emitter; diff --git a/fsp.js b/fsp.js new file mode 100644 index 0000000..9377a43 --- /dev/null +++ b/fsp.js @@ -0,0 +1,43 @@ +'use strict'; + +const fs = require('fs'); + +let fsp = {}; + +fsp.readFile = function(path) { + return new Promise(function(resolve, reject) { + fs.readFile(path, 'utf8', function(err, data) { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +}; + +fsp.writeFile = function(path, data) { + return new Promise(function(resolve, reject) { + fs.writeFile(path, data, function(err) { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +}; + +fsp.appendFile = function(path, data) { + return new Promise(function(resolve, reject) { + fs.appendFile(path, data, function(err) { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +}; + +module.exports = fsp; diff --git a/index.js b/index.js index 806aca0..644bad4 100644 --- a/index.js +++ b/index.js @@ -1,29 +1,28 @@ 'use strict'; +const fs = require('fs'); +const fsp = require('./fsp.js'); +const Emitter = require('./emit.js'); +let emitter = new Emitter(); -var hello = new Promise(function(resolve, reject) { +var hello = new Promise((resolve, reject) => { setTimeout(resolve('Hello Promise!'), 1000); }); -hello - .then(function(message) { - console.log(message); - }) - .catch(function(err) { - console.error(err); - }); +hello.then(message => console.log(message)).catch(err => console.error(err)); -let delay = function(milliseconds) { +let delay = milliseconds => { return new Promise(function(resolve, reject) { - setTimeout(milliseconds); - if (milliseconds > 0) { - resolve(milliseconds); - } else { - reject('Done'); - } + setTimeout(() => { + if (milliseconds > 0) { + resolve(milliseconds); + } else { + reject('Done'); + } + }, milliseconds); }); }; -let countDown = function(result) { +let countDown = result => { if (result > 0) { console.log(result); return (result -= 100); @@ -45,8 +44,8 @@ delay(1000) .then(countDown) //=> 100 .then(countDown); //=> Done! -let square = function(val) { - return new Promise(function(resolve, reject) { +let square = val => { + return new Promise((resolve, reject) => { if (val !== undefined && typeof val === 'number') { resolve(Math.pow(val, 2)); } else { @@ -59,12 +58,10 @@ let numArray = [1, 2, 3, 4, 5, 6, 7, 8, 9]; numArray = numArray.map(square); -Promise.all(numArray).then(function(val) { - console.log(val); -}); +Promise.all(numArray).then(val => console.log(val)); -let doBadThing = function(forRealz) { - return new Promise(function(resolve, reject) { +let doBadThing = forRealz => { + return new Promise((resolve, reject) => { if (forRealz) { reject('Booo'); } else { @@ -74,17 +71,48 @@ let doBadThing = function(forRealz) { }; doBadThing('jefe').then( - function(resolve) { + resolve => { console.log(resolve); }, - function(reject) { - throw reject; + reject => { + try { + throw reject; + } catch (err) { + console.error(err); + } } ); doBadThing(21) - .then(function(result) { - console.log('!!' + result); - }) - .catch(function(err) { - console.error(err); - }); + .then(result => console.log('!!' + result)) + .catch(err => console.error(err)); + +fsp + .readFile('./lorem.txt') + .then(data => console.log(data)) + .catch(err => console.error(err)); + +fsp + .writeFile('./lorem.txt', 'Hello!') + .then(res => console.log(res)) + .catch(err => console.error(err)); + +fsp + .appendFile('./lorem.txt', 'Hello Again!') + .then(res => console.log(res)) + .catch(err => console.error(err)); + +let clocked = () => console.log('clocked'); + +emitter.on('clock', clocked); + +emitter.on('clock', () => console.log('Its alive')); + +emitter.emit('clock'); + +emitter.removeListener('clock', clocked); + +emitter.emit('clock'); + +emitter.removeAllListeners('clock'); + +console.log(emitter); diff --git a/lorem.txt b/lorem.txt new file mode 100644 index 0000000..e30c156 --- /dev/null +++ b/lorem.txt @@ -0,0 +1 @@ +Hello!Hello Again! \ No newline at end of file From 383eac7109ae6d62308b5a9a26916ad6a9c48ec5 Mon Sep 17 00:00:00 2001 From: Jeff Dederick Date: Thu, 2 Nov 2017 12:37:52 -0400 Subject: [PATCH 3/3] linked to node events module --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index 644bad4..4d1f0ae 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,7 @@ const fs = require('fs'); const fsp = require('./fsp.js'); const Emitter = require('./emit.js'); let emitter = new Emitter(); +const nativeEmitter = require('events'); var hello = new Promise((resolve, reject) => { setTimeout(resolve('Hello Promise!'), 1000);