From eaa3c2ff97f1e72e87141cb6ffe0780b6c89d7d5 Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Tue, 26 Sep 2017 10:18:22 -0400 Subject: [PATCH 01/11] warmup 1 & 2 complete --- README.md | 3 +++ index.js | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 19 ++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 index.js create mode 100644 package.json diff --git a/README.md b/README.md index c32c34d..59701f7 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ # assignment_async_nodejs Async Node.js sprint + + +Steven Zarrella \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..9317669 --- /dev/null +++ b/index.js @@ -0,0 +1,62 @@ +"use strict"; + +var fs = require('fs'); + + +// WARMUP 1 +let promise1 = new Promise(function(resolve, reject) { + if (1===1) { + resolve("Hello Promise!"); + } else { + reject("UNIVERSE BROKEN."); + } +}) + .then(function(message) { + setTimeout(function() { + return; + }, 1000); + console.log(message); + }); + +debugger; +// WARMUP 2 +let delay = function(milliseconds) { + return new Promise(function(resolve, reject) { + setTimeout(function() { + resolve(milliseconds); + }, milliseconds); + }); +} + +let countDown = function(value) { + let newValue = value - 100; + if (newValue < 100) { + newValue = 0; + } + console.log(newValue); + return new Promise(function(resolve, reject) { + resolve(delay(newValue)); + }); +} + +delay(1000) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .catch(function(error) { + console.log(error); + }); + + + + + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..8fc06db --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "assignment_async_nodejs", + "version": "1.0.0", + "description": "Async Node.js sprint", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/stevenvz/assignment_async_nodejs.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/stevenvz/assignment_async_nodejs/issues" + }, + "homepage": "https://github.com/stevenvz/assignment_async_nodejs#readme" +} From e3fd98d402d05fc21649e6024dd4b351baaba6c0 Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Tue, 26 Sep 2017 10:46:39 -0400 Subject: [PATCH 02/11] warmup 3 complete --- index.js | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 9317669..a8ab809 100644 --- a/index.js +++ b/index.js @@ -18,7 +18,7 @@ let promise1 = new Promise(function(resolve, reject) { console.log(message); }); -debugger; + // WARMUP 2 let delay = function(milliseconds) { return new Promise(function(resolve, reject) { @@ -55,6 +55,42 @@ delay(1000) }); +// WARMUP 3 +let squaredPromise = function(number) { + return new Promise(function(resolve, reject) { + if (typeof number === 'number') { + var numSquared = number * number; + resolve(numSquared); + } else { + reject("NOT A NUMBER"); + } + }); +} + +let numbers = [2, 3, 4, 5, 6]; + +numbers = numbers.map(squaredPromise); + +Promise.all(numbers) + .then(function(results) { + console.log(results); + }) + .catch(function(error) { + console.log(error); + }); + + + + + + + + + + + + + From e1897868b95d7d8394c2427a6d350c37db075166 Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Tue, 26 Sep 2017 11:01:00 -0400 Subject: [PATCH 03/11] warmup 4 complete --- index.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index a8ab809..e1d0017 100644 --- a/index.js +++ b/index.js @@ -80,9 +80,24 @@ Promise.all(numbers) }); +// WARMUP 4 +let doBadThing = function(forRealz) { + return new Promise(function(resolve, reject) { + if(forRealz == true) { + resolve("Yay!"); + } else { + reject("BOO."); + } + }); +} - - +doBadThing(true) + .then(function(result) { + console.log(result); + }) + .catch(function(error) { + console.log(error); + }); From 47b1febbaac1e1f77abfbb0ee8bd34a0d3fb12f9 Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Tue, 26 Sep 2017 12:00:41 -0400 Subject: [PATCH 04/11] file operations section complete --- data/testy.txt | 1 + data/text.txt | 1 + index.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 data/testy.txt create mode 100644 data/text.txt diff --git a/data/testy.txt b/data/testy.txt new file mode 100644 index 0000000..2d33477 --- /dev/null +++ b/data/testy.txt @@ -0,0 +1 @@ +The mouse is a big blue rabbit fox hound nugget!!!! MEOWWWWW!!! \ No newline at end of file diff --git a/data/text.txt b/data/text.txt new file mode 100644 index 0000000..dcb4c5a --- /dev/null +++ b/data/text.txt @@ -0,0 +1 @@ +Organic twee quinoa slow-carb biodiesel. Ethical kinfolk disrupt tousled, direct trade slow-carb salvia. Banh mi intelligentsia thundercats sartorial VHS schlitz hoodie. Bitters chia ennui bushwick, tilde hexagon cornhole paleo chambray tumblr etsy. XOXO locavore gochujang, occupy meh literally air plant. Cardigan bicycle rights letterpress, trust fund plaid blog mustache vexillologist bushwick slow-carb normcore gastropub tacos hammock. Gastropub bicycle rights ramps direct trade VHS. Copper mug 90's iceland, biodiesel enamel pin hot chicken art party occupy bitters scenester. Vexillologist master cleanse umami green juice. \ No newline at end of file diff --git a/index.js b/index.js index e1d0017..4e87ebc 100644 --- a/index.js +++ b/index.js @@ -100,6 +100,71 @@ doBadThing(true) }); +// FILE OPERATIONS +let fsp = { + readFile: function(path) { + return new Promise(function(resolve, reject) { + var text = fs.readFile(path, 'utf8', (error, data) => { + if (error) throw error; + resolve(data); + }); + }); + }, + + writeFile: function(path, input) { + return new Promise(function(resolve, reject) { + var text = fs.writeFile(path, input, 'utf8', (error) => { + if (error) reject(error); + resolve(fsp.readFile(path)); + }); + }); + }, + + appendFile: function(path, input) { + return new Promise(function(resolve, reject) { + var text = fs.appendFile(path, input, 'utf8', (error) => { + if (error) reject(error); + resolve(fsp.readFile(path)); + }); + }); + }, +} + + +fsp.readFile('./data/text.txt') + .then(function(data) { + console.log(data); + }) + .catch(function(error) { + console.log(error); + }); + +fsp.writeFile('./data/testy.txt', "The mouse is a big blue rabbit fox hound nugget!!!!") + .then(function(data) { + console.log("File saved! CONTENTS: " + data); + }) + .catch(function(error) { + console.log(error); + }); + +fsp.appendFile('./data/testy.txt', " MEOWWWWW!!!") + .then(function(data) { + console.log("File saved! CONTENTS: " + data); + }) + .catch(function(error) { + console.log(error); + }); + + + +// CREATE AN EVEN EMITTER FROM SCRATCH +//YOUAREHERE + + + + + + From de6015a85e4f46b186d249a087ac49d99e59101f Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Tue, 26 Sep 2017 17:32:43 -0400 Subject: [PATCH 05/11] emitter.emit working --- index.js | 323 +++++++++++++++++++++++---------------------- modules/emitter.js | 52 ++++++++ 2 files changed, 220 insertions(+), 155 deletions(-) create mode 100644 modules/emitter.js diff --git a/index.js b/index.js index 4e87ebc..8167b6f 100644 --- a/index.js +++ b/index.js @@ -1,171 +1,184 @@ "use strict"; -var fs = require('fs'); +const fs = require('fs'), + Emitter = require('./modules/emitter'); +let emitter = new Emitter(); -// WARMUP 1 -let promise1 = new Promise(function(resolve, reject) { - if (1===1) { - resolve("Hello Promise!"); - } else { - reject("UNIVERSE BROKEN."); - } -}) - .then(function(message) { - setTimeout(function() { - return; - }, 1000); - console.log(message); - }); - - -// WARMUP 2 -let delay = function(milliseconds) { - return new Promise(function(resolve, reject) { - setTimeout(function() { - resolve(milliseconds); - }, milliseconds); - }); -} - -let countDown = function(value) { - let newValue = value - 100; - if (newValue < 100) { - newValue = 0; - } - console.log(newValue); - return new Promise(function(resolve, reject) { - resolve(delay(newValue)); - }); -} - -delay(1000) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .catch(function(error) { - console.log(error); - }); - - -// WARMUP 3 -let squaredPromise = function(number) { - return new Promise(function(resolve, reject) { - if (typeof number === 'number') { - var numSquared = number * number; - resolve(numSquared); - } else { - reject("NOT A NUMBER"); - } - }); -} -let numbers = [2, 3, 4, 5, 6]; - -numbers = numbers.map(squaredPromise); - -Promise.all(numbers) - .then(function(results) { - console.log(results); - }) - .catch(function(error) { - console.log(error); - }); - - -// WARMUP 4 -let doBadThing = function(forRealz) { - return new Promise(function(resolve, reject) { - if(forRealz == true) { - resolve("Yay!"); +// WARMUP 1 +// let promise1 = new Promise(function(resolve, reject) { +// if (1===1) { +// resolve("Hello Promise!"); +// } else { +// reject("UNIVERSE BROKEN."); +// } +// }) +// .then(function(message) { +// setTimeout(function() { +// return; +// }, 1000); +// console.log(message); +// }); + + +// // WARMUP 2 +// let delay = function(milliseconds) { +// return new Promise(function(resolve, reject) { +// setTimeout(function() { +// resolve(milliseconds); +// }, milliseconds); +// }); +// } + +// let countDown = function(value) { +// let newValue = value - 100; +// if (newValue < 100) { +// newValue = 0; +// } +// console.log(newValue); +// return new Promise(function(resolve, reject) { +// resolve(delay(newValue)); +// }); +// } + +// delay(1000) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .catch(function(error) { +// console.log(error); +// }); + + +// // WARMUP 3 +// let squaredPromise = function(number) { +// return new Promise(function(resolve, reject) { +// if (typeof number === 'number') { +// var numSquared = number * number; +// resolve(numSquared); +// } else { +// reject("NOT A NUMBER"); +// } +// }); +// } + +// let numbers = [2, 3, 4, 5, 6]; + +// numbers = numbers.map(squaredPromise); + +// Promise.all(numbers) +// .then(function(results) { +// console.log(results); +// }) +// .catch(function(error) { +// console.log(error); +// }); + + +// // WARMUP 4 +// let doBadThing = function(forRealz) { +// return new Promise(function(resolve, reject) { +// if(forRealz == true) { +// resolve("Yay!"); +// } else { +// reject("BOO."); +// } +// }); +// } + +// doBadThing(true) +// .then(function(result) { +// console.log(result); +// }) +// .catch(function(error) { +// console.log(error); +// }); + + +// // FILE OPERATIONS +// let fsp = { +// readFile: function(path) { +// return new Promise(function(resolve, reject) { +// var text = fs.readFile(path, 'utf8', (error, data) => { +// if (error) throw error; +// resolve(data); +// }); +// }); +// }, + +// writeFile: function(path, input) { +// return new Promise(function(resolve, reject) { +// var text = fs.writeFile(path, input, 'utf8', (error) => { +// if (error) reject(error); +// resolve(fsp.readFile(path)); +// }); +// }); +// }, + +// appendFile: function(path, input) { +// return new Promise(function(resolve, reject) { +// var text = fs.appendFile(path, input, 'utf8', (error) => { +// if (error) reject(error); +// resolve(fsp.readFile(path)); +// }); +// }); +// }, +// } + + +// fsp.readFile('./data/text.txt') +// .then(function(data) { +// console.log(data); +// }) +// .catch(function(error) { +// console.log(error); +// }); + +// fsp.writeFile('./data/testy.txt', "The mouse is a big blue rabbit fox hound nugget!!!!") +// .then(function(data) { +// console.log("File saved! CONTENTS: " + data); +// }) +// .catch(function(error) { +// console.log(error); +// }); + +// fsp.appendFile('./data/testy.txt', " MEOWWWWW!!!") +// .then(function(data) { +// console.log("File saved! CONTENTS: " + data); +// }) +// .catch(function(error) { +// console.log(error); +// }); + + + +// CREATE AN EVENT EMITTER FROM SCRATCH +emitter.on("meow", function(){console.log("poop meow");}); +emitter.on("woof", function(){console.log("poop woof");}); +emitter.on("click", function(){console.log("poop click");}); + +emitter.emit("meow") + .then(function(data) { + if (data) { + let returnedFunction = data.callback; + returnedFunction(); } else { - reject("BOO."); + throw new Error("Event not found!"); } - }); -} - -doBadThing(true) - .then(function(result) { - console.log(result); }) .catch(function(error) { console.log(error); }); -// FILE OPERATIONS -let fsp = { - readFile: function(path) { - return new Promise(function(resolve, reject) { - var text = fs.readFile(path, 'utf8', (error, data) => { - if (error) throw error; - resolve(data); - }); - }); - }, - - writeFile: function(path, input) { - return new Promise(function(resolve, reject) { - var text = fs.writeFile(path, input, 'utf8', (error) => { - if (error) reject(error); - resolve(fsp.readFile(path)); - }); - }); - }, - - appendFile: function(path, input) { - return new Promise(function(resolve, reject) { - var text = fs.appendFile(path, input, 'utf8', (error) => { - if (error) reject(error); - resolve(fsp.readFile(path)); - }); - }); - }, -} - - -fsp.readFile('./data/text.txt') - .then(function(data) { - console.log(data); - }) - .catch(function(error) { - console.log(error); - }); - -fsp.writeFile('./data/testy.txt', "The mouse is a big blue rabbit fox hound nugget!!!!") - .then(function(data) { - console.log("File saved! CONTENTS: " + data); - }) - .catch(function(error) { - console.log(error); - }); - -fsp.appendFile('./data/testy.txt', " MEOWWWWW!!!") - .then(function(data) { - console.log("File saved! CONTENTS: " + data); - }) - .catch(function(error) { - console.log(error); - }); - - - -// CREATE AN EVEN EMITTER FROM SCRATCH -//YOUAREHERE - - - - - - - diff --git a/modules/emitter.js b/modules/emitter.js new file mode 100644 index 0000000..21272f7 --- /dev/null +++ b/modules/emitter.js @@ -0,0 +1,52 @@ +"use strict"; + +//create Emitter constructor +function Emitter(eventType, callback) { + + this.listeners = []; + + this.on = function(eventType, callback) { + this.listeners.push({ + "eventType": eventType, + "callback": callback + }); + }; //this.on + + this.emit = function(event) { + + let listeners = this.listeners; + return new Promise(function(resolve, reject) { + + let matchArray = []; + listeners.forEach(function(item) { + if (item.eventType === event) { + matchArray.push(item); + }; + }); + + if (matchArray === []) { + reject("Event not found!"); + } else { + resolve(matchArray[0]); + } + }); + }; + + // this.emit = function(event) { + // let matchArray = []; + // this.listeners.forEach(function(item) { + // if (item.eventType === event) { + // matchArray.push(item.callback); + // }; + // }); + + // if (matchArray === []) { + // throw new Error("Event not found!"); + // } else { + // console.log(matchArray[0]); + // return matchArray[0]; + // } + // }; //this.emit +} + +module.exports = Emitter; \ No newline at end of file From 8241b48ae5071aafe402aec750be5546c881c085 Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Tue, 26 Sep 2017 18:02:49 -0400 Subject: [PATCH 06/11] emitter.emit now works for all matching event types, instead of just one --- index.js | 33 ++++++++++++++++++++++----------- modules/emitter.js | 20 ++------------------ 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/index.js b/index.js index 8167b6f..853ffce 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,26 @@ "use strict"; const fs = require('fs'), - Emitter = require('./modules/emitter'); -let emitter = new Emitter(); + Emitter = require('./modules/emitter'), + + ExecuteCallback = function(data) { + if (data.length !== 0) { + data.forEach(function(item) { + return new Promise(function(resolve, reject) { + if (item) { + resolve(item.callback()); + } else { + reject("No callback found!"); + } + }); + }); + } else { + throw new Error("Event not found!"); + } + }; +let emitter = new Emitter(); // WARMUP 1 // let promise1 = new Promise(function(resolve, reject) { @@ -164,16 +180,11 @@ let emitter = new Emitter(); emitter.on("meow", function(){console.log("poop meow");}); emitter.on("woof", function(){console.log("poop woof");}); emitter.on("click", function(){console.log("poop click");}); +emitter.on("woof", function(){console.log("WOOF woof");}); +emitter.on("woof", function(){console.log("KITTYCAT woof");}); -emitter.emit("meow") - .then(function(data) { - if (data) { - let returnedFunction = data.callback; - returnedFunction(); - } else { - throw new Error("Event not found!"); - } - }) +emitter.emit("woof") + .then(ExecuteCallback) .catch(function(error) { console.log(error); }); diff --git a/modules/emitter.js b/modules/emitter.js index 21272f7..d3a08e3 100644 --- a/modules/emitter.js +++ b/modules/emitter.js @@ -23,30 +23,14 @@ function Emitter(eventType, callback) { matchArray.push(item); }; }); - + if (matchArray === []) { reject("Event not found!"); } else { - resolve(matchArray[0]); + resolve(matchArray); } }); }; - - // this.emit = function(event) { - // let matchArray = []; - // this.listeners.forEach(function(item) { - // if (item.eventType === event) { - // matchArray.push(item.callback); - // }; - // }); - - // if (matchArray === []) { - // throw new Error("Event not found!"); - // } else { - // console.log(matchArray[0]); - // return matchArray[0]; - // } - // }; //this.emit } module.exports = Emitter; \ No newline at end of file From 96d1cdf57d6bae1e1eaa4ff06d1b7f64b9d5ac94 Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Tue, 26 Sep 2017 20:31:53 -0400 Subject: [PATCH 07/11] working on Emitter.removeListener --- index.js | 15 ++++++++------- modules/emitter.js | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/index.js b/index.js index 853ffce..622f9e6 100644 --- a/index.js +++ b/index.js @@ -3,7 +3,7 @@ const fs = require('fs'), Emitter = require('./modules/emitter'), - + ExecuteCallback = function(data) { if (data.length !== 0) { data.forEach(function(item) { @@ -174,7 +174,7 @@ let emitter = new Emitter(); // console.log(error); // }); - +//let woofWoof = function(){console.log("WOOF woof");}; // CREATE AN EVENT EMITTER FROM SCRATCH emitter.on("meow", function(){console.log("poop meow");}); @@ -183,13 +183,14 @@ emitter.on("click", function(){console.log("poop click");}); emitter.on("woof", function(){console.log("WOOF woof");}); emitter.on("woof", function(){console.log("KITTYCAT woof");}); -emitter.emit("woof") - .then(ExecuteCallback) - .catch(function(error) { - console.log(error); - }); +// emitter.emit("woof") +// .then(ExecuteCallback) +// .catch(function(error) { +// console.log(error); +// }); +emitter.removeListener("woof", function(){console.log("WOOF woof");}); diff --git a/modules/emitter.js b/modules/emitter.js index d3a08e3..d6deb10 100644 --- a/modules/emitter.js +++ b/modules/emitter.js @@ -30,7 +30,23 @@ function Emitter(eventType, callback) { resolve(matchArray); } }); - }; + }; //this.emit + + this.removeListener = function(event, callFunc) { + console.log(this.listeners); + this.listeners = this.listeners.filter(function(item) { + // console.log("ITEM " + item.eventType); + // console.log(event); + // console.log(item.callback.toString()); + // console.log(callFunc.toString()); + if (item.eventType !== event) { + if (item.callback.toString() !== callFunc.toString()) { + return item; //YOUAREHERE - this is currently filtering out all listeners with a matching eventType, with no regard for the callback match. FIX IT!!! + } + } + }); + console.log(this.listeners); + } } module.exports = Emitter; \ No newline at end of file From 5afb8ac44fb8cff3c00140056c717ef475df6ece Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Wed, 27 Sep 2017 09:36:31 -0400 Subject: [PATCH 08/11] emitter.removeListener fully working; refactored and corrected emitter.emit --- index.js | 53 ++++++++++++++++----------------- modules/emitter.js | 73 +++++++++++++++++++++++++++++++++------------- 2 files changed, 80 insertions(+), 46 deletions(-) diff --git a/index.js b/index.js index 622f9e6..fd94a86 100644 --- a/index.js +++ b/index.js @@ -2,23 +2,23 @@ const fs = require('fs'), - Emitter = require('./modules/emitter'), - - ExecuteCallback = function(data) { - if (data.length !== 0) { - data.forEach(function(item) { - return new Promise(function(resolve, reject) { - if (item) { - resolve(item.callback()); - } else { - reject("No callback found!"); - } - }); - }); - } else { - throw new Error("Event not found!"); - } - }; + Emitter = require('./modules/emitter'); + + // ExecuteCallback = function(data) { + // if (data.length !== 0) { + // data.forEach(function(item) { + // return new Promise(function(resolve, reject) { + // if (item) { + // resolve(item.callback()); + // } else { + // reject("No callback found!"); + // } + // }); + // }); + // } else { + // throw new Error("Event not found!"); + // } + // }; let emitter = new Emitter(); @@ -174,23 +174,24 @@ let emitter = new Emitter(); // console.log(error); // }); -//let woofWoof = function(){console.log("WOOF woof");}; +let woofWoof = function(){console.log("WOOF woof");}; // CREATE AN EVENT EMITTER FROM SCRATCH emitter.on("meow", function(){console.log("poop meow");}); emitter.on("woof", function(){console.log("poop woof");}); emitter.on("click", function(){console.log("poop click");}); -emitter.on("woof", function(){console.log("WOOF woof");}); +emitter.on("woof", function(){setTimeout(function() {console.log("WOOF woof")} + , 3000)}); emitter.on("woof", function(){console.log("KITTYCAT woof");}); -// emitter.emit("woof") -// .then(ExecuteCallback) -// .catch(function(error) { -// console.log(error); -// }); - -emitter.removeListener("woof", function(){console.log("WOOF woof");}); +emitter.emit("pooo"); + // .then(ExecuteCallback) + // .catch(function(error) { + // console.log(error); + // }); +//debugger; +//emitter.removeListener("woof", woofWoof); diff --git a/modules/emitter.js b/modules/emitter.js index d6deb10..b351c27 100644 --- a/modules/emitter.js +++ b/modules/emitter.js @@ -5,6 +5,22 @@ function Emitter(eventType, callback) { this.listeners = []; + this.executeCallback = function(data) { + if (data.length !== 0) { + data.forEach(function(item) { + return new Promise(function(resolve, reject) { + if (item) { + resolve(item.callback()); + } else { + reject("No callback found!"); + } + }); + }); + } else { + throw new Error("Event not found!"); + } + }; + this.on = function(eventType, callback) { this.listeners.push({ "eventType": eventType, @@ -15,34 +31,51 @@ function Emitter(eventType, callback) { this.emit = function(event) { let listeners = this.listeners; - return new Promise(function(resolve, reject) { + let matchArray = []; - let matchArray = []; - listeners.forEach(function(item) { - if (item.eventType === event) { - matchArray.push(item); - }; - }); - - if (matchArray === []) { - reject("Event not found!"); + //create the promise to execute each matching callback asynchronously + let executeCallback = function(data) { + if (data.length !== 0) { + return new Promise(function(resolve, reject) { + if (data) { + resolve(data.callback()); + } else { + reject("No callback found!"); + } + }); } else { - resolve(matchArray); + throw new Error("Event not found!"); } + }; + + //cycle through each listener to look for a matching event + listeners.forEach(function(item) { + if (item.eventType === event) { + matchArray.push(item); + }; }); + + //execute each matching event's callback function + if (matchArray.length === 0) { + throw new Error("Event not found."); + } else { + matchArray.forEach(function(item) { + executeCallback(item); + }); + console.log("Success! Event(s) triggered."); + } + }; //this.emit this.removeListener = function(event, callFunc) { - console.log(this.listeners); + + let eventString = event.toString() + callFunc.toString(); + this.listeners = this.listeners.filter(function(item) { - // console.log("ITEM " + item.eventType); - // console.log(event); - // console.log(item.callback.toString()); - // console.log(callFunc.toString()); - if (item.eventType !== event) { - if (item.callback.toString() !== callFunc.toString()) { - return item; //YOUAREHERE - this is currently filtering out all listeners with a matching eventType, with no regard for the callback match. FIX IT!!! - } + let currentString = item.eventType.toString() + item.callback.toString(); + console.log(currentString); + if (currentString !== eventString) { + return item; } }); console.log(this.listeners); From 22b5d7c0f7f752ec3a6973926e555851bdf13b25 Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Wed, 27 Sep 2017 09:51:28 -0400 Subject: [PATCH 09/11] project complete --- index.js | 340 +++++++++++++++++++++------------------------ modules/emitter.js | 29 +++- 2 files changed, 185 insertions(+), 184 deletions(-) diff --git a/index.js b/index.js index fd94a86..1299aee 100644 --- a/index.js +++ b/index.js @@ -1,199 +1,177 @@ "use strict"; const fs = require('fs'), - + //Emitter = require('events'); Emitter = require('./modules/emitter'); - // ExecuteCallback = function(data) { - // if (data.length !== 0) { - // data.forEach(function(item) { - // return new Promise(function(resolve, reject) { - // if (item) { - // resolve(item.callback()); - // } else { - // reject("No callback found!"); - // } - // }); - // }); - // } else { - // throw new Error("Event not found!"); - // } - // }; - -let emitter = new Emitter(); - // WARMUP 1 -// let promise1 = new Promise(function(resolve, reject) { -// if (1===1) { -// resolve("Hello Promise!"); -// } else { -// reject("UNIVERSE BROKEN."); -// } -// }) -// .then(function(message) { -// setTimeout(function() { -// return; -// }, 1000); -// console.log(message); -// }); - - -// // WARMUP 2 -// let delay = function(milliseconds) { -// return new Promise(function(resolve, reject) { -// setTimeout(function() { -// resolve(milliseconds); -// }, milliseconds); -// }); -// } - -// let countDown = function(value) { -// let newValue = value - 100; -// if (newValue < 100) { -// newValue = 0; -// } -// console.log(newValue); -// return new Promise(function(resolve, reject) { -// resolve(delay(newValue)); -// }); -// } - -// delay(1000) -// .then(countDown) -// .then(countDown) -// .then(countDown) -// .then(countDown) -// .then(countDown) -// .then(countDown) -// .then(countDown) -// .then(countDown) -// .then(countDown) -// .then(countDown) -// .catch(function(error) { -// console.log(error); -// }); - - -// // WARMUP 3 -// let squaredPromise = function(number) { -// return new Promise(function(resolve, reject) { -// if (typeof number === 'number') { -// var numSquared = number * number; -// resolve(numSquared); -// } else { -// reject("NOT A NUMBER"); -// } -// }); -// } - -// let numbers = [2, 3, 4, 5, 6]; - -// numbers = numbers.map(squaredPromise); - -// Promise.all(numbers) -// .then(function(results) { -// console.log(results); -// }) -// .catch(function(error) { -// console.log(error); -// }); - - -// // WARMUP 4 -// let doBadThing = function(forRealz) { -// return new Promise(function(resolve, reject) { -// if(forRealz == true) { -// resolve("Yay!"); -// } else { -// reject("BOO."); -// } -// }); -// } - -// doBadThing(true) -// .then(function(result) { -// console.log(result); -// }) -// .catch(function(error) { -// console.log(error); -// }); - - -// // FILE OPERATIONS -// let fsp = { -// readFile: function(path) { -// return new Promise(function(resolve, reject) { -// var text = fs.readFile(path, 'utf8', (error, data) => { -// if (error) throw error; -// resolve(data); -// }); -// }); -// }, - -// writeFile: function(path, input) { -// return new Promise(function(resolve, reject) { -// var text = fs.writeFile(path, input, 'utf8', (error) => { -// if (error) reject(error); -// resolve(fsp.readFile(path)); -// }); -// }); -// }, - -// appendFile: function(path, input) { -// return new Promise(function(resolve, reject) { -// var text = fs.appendFile(path, input, 'utf8', (error) => { -// if (error) reject(error); -// resolve(fsp.readFile(path)); -// }); -// }); -// }, -// } - - -// fsp.readFile('./data/text.txt') -// .then(function(data) { -// console.log(data); -// }) -// .catch(function(error) { -// console.log(error); -// }); - -// fsp.writeFile('./data/testy.txt', "The mouse is a big blue rabbit fox hound nugget!!!!") -// .then(function(data) { -// console.log("File saved! CONTENTS: " + data); -// }) -// .catch(function(error) { -// console.log(error); -// }); - -// fsp.appendFile('./data/testy.txt', " MEOWWWWW!!!") -// .then(function(data) { -// console.log("File saved! CONTENTS: " + data); -// }) -// .catch(function(error) { -// console.log(error); -// }); - -let woofWoof = function(){console.log("WOOF woof");}; +let promise1 = new Promise(function(resolve, reject) { + if (1===1) { + resolve("Hello Promise!"); + } else { + reject("UNIVERSE BROKEN."); + } +}) + .then(function(message) { + setTimeout(function() { + return; + }, 1000); + console.log(message); + }); + + +// WARMUP 2 +let delay = function(milliseconds) { + return new Promise(function(resolve, reject) { + setTimeout(function() { + resolve(milliseconds); + }, milliseconds); + }); +} + +let countDown = function(value) { + let newValue = value - 100; + if (newValue < 100) { + newValue = 0; + } + console.log(newValue); + return new Promise(function(resolve, reject) { + resolve(delay(newValue)); + }); +} + +delay(1000) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .catch(function(error) { + console.log(error); + }); + + +// WARMUP 3 +let squaredPromise = function(number) { + return new Promise(function(resolve, reject) { + if (typeof number === 'number') { + var numSquared = number * number; + resolve(numSquared); + } else { + reject("NOT A NUMBER"); + } + }); +} + +let numbers = [2, 3, 4, 5, 6]; + +numbers = numbers.map(squaredPromise); + +Promise.all(numbers) + .then(function(results) { + console.log(results); + }) + .catch(function(error) { + console.log(error); + }); + + +// WARMUP 4 +let doBadThing = function(forRealz) { + return new Promise(function(resolve, reject) { + if(forRealz == true) { + resolve("Yay!"); + } else { + reject("BOO."); + } + }); +} + +doBadThing(true) + .then(function(result) { + console.log(result); + }) + .catch(function(error) { + console.log(error); + }); + + +// FILE OPERATIONS +let fsp = { + readFile: function(path) { + return new Promise(function(resolve, reject) { + var text = fs.readFile(path, 'utf8', (error, data) => { + if (error) throw error; + resolve(data); + }); + }); + }, + + writeFile: function(path, input) { + return new Promise(function(resolve, reject) { + var text = fs.writeFile(path, input, 'utf8', (error) => { + if (error) reject(error); + resolve(fsp.readFile(path)); + }); + }); + }, + + appendFile: function(path, input) { + return new Promise(function(resolve, reject) { + var text = fs.appendFile(path, input, 'utf8', (error) => { + if (error) reject(error); + resolve(fsp.readFile(path)); + }); + }); + }, +} + + +fsp.readFile('./data/text.txt') + .then(function(data) { + console.log(data); + }) + .catch(function(error) { + console.log(error); + }); + +fsp.writeFile('./data/testy.txt', "The mouse is a big blue rabbit fox hound nugget!!!!") + .then(function(data) { + console.log("File saved! CONTENTS: " + data); + }) + .catch(function(error) { + console.log(error); + }); + +fsp.appendFile('./data/testy.txt', " MEOWWWWW!!!") + .then(function(data) { + console.log("File saved! CONTENTS: " + data); + }) + .catch(function(error) { + console.log(error); + }); // CREATE AN EVENT EMITTER FROM SCRATCH -emitter.on("meow", function(){console.log("poop meow");}); -emitter.on("woof", function(){console.log("poop woof");}); -emitter.on("click", function(){console.log("poop click");}); +let emitter = new Emitter(); + +emitter.on("meow", function(){console.log("foo meow");}); +emitter.on("woof", function(){console.log("foo woof");}); +emitter.on("click", function(){console.log("foo click");}); emitter.on("woof", function(){setTimeout(function() {console.log("WOOF woof")} , 3000)}); emitter.on("woof", function(){console.log("KITTYCAT woof");}); -emitter.emit("pooo"); - // .then(ExecuteCallback) - // .catch(function(error) { - // console.log(error); - // }); -//debugger; +emitter.emit("woof"); + //emitter.removeListener("woof", woofWoof); - +emitter.removeAllListeners("woof"); diff --git a/modules/emitter.js b/modules/emitter.js index b351c27..9bb8a0b 100644 --- a/modules/emitter.js +++ b/modules/emitter.js @@ -78,8 +78,31 @@ function Emitter(eventType, callback) { return item; } }); - console.log(this.listeners); - } + console.log("Current listeners: " + this.listeners); + }; //this.removelistener + + this.removeAllListeners = function(event) { + this.listeners = this.listeners.filter(function(item) { + if (item.eventType !== event) { + return item; + } + }); + console.log("Current listeners: " + this.listeners); + }; //this.removeAllListeners } -module.exports = Emitter; \ No newline at end of file +module.exports = Emitter; + + + + + + + + + + + + + + From 9ffa1708b2ce3424d0ee6ef20d80c144f0c5203b Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Wed, 27 Sep 2017 09:53:06 -0400 Subject: [PATCH 10/11] project complete --- modules/emitter.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/emitter.js b/modules/emitter.js index 9bb8a0b..9a09106 100644 --- a/modules/emitter.js +++ b/modules/emitter.js @@ -36,13 +36,13 @@ function Emitter(eventType, callback) { //create the promise to execute each matching callback asynchronously let executeCallback = function(data) { if (data.length !== 0) { - return new Promise(function(resolve, reject) { - if (data) { - resolve(data.callback()); - } else { - reject("No callback found!"); - } - }); + return new Promise(function(resolve, reject) { + if (data) { + resolve(data.callback()); + } else { + reject("No callback found!"); + } + }); } else { throw new Error("Event not found!"); } From 2b3cc1a1fa4a14a7fd30f24b5803e828915eba01 Mon Sep 17 00:00:00 2001 From: Steven Zarrella Date: Mon, 2 Oct 2017 12:47:21 -0400 Subject: [PATCH 11/11] minor console.log adjustments --- index.js | 300 ++++++++++++++++++++++----------------------- modules/emitter.js | 2 +- 2 files changed, 151 insertions(+), 151 deletions(-) diff --git a/index.js b/index.js index 1299aee..f9292be 100644 --- a/index.js +++ b/index.js @@ -5,156 +5,156 @@ const fs = require('fs'), Emitter = require('./modules/emitter'); // WARMUP 1 -let promise1 = new Promise(function(resolve, reject) { - if (1===1) { - resolve("Hello Promise!"); - } else { - reject("UNIVERSE BROKEN."); - } -}) - .then(function(message) { - setTimeout(function() { - return; - }, 1000); - console.log(message); - }); - - -// WARMUP 2 -let delay = function(milliseconds) { - return new Promise(function(resolve, reject) { - setTimeout(function() { - resolve(milliseconds); - }, milliseconds); - }); -} - -let countDown = function(value) { - let newValue = value - 100; - if (newValue < 100) { - newValue = 0; - } - console.log(newValue); - return new Promise(function(resolve, reject) { - resolve(delay(newValue)); - }); -} - -delay(1000) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .then(countDown) - .catch(function(error) { - console.log(error); - }); - - -// WARMUP 3 -let squaredPromise = function(number) { - return new Promise(function(resolve, reject) { - if (typeof number === 'number') { - var numSquared = number * number; - resolve(numSquared); - } else { - reject("NOT A NUMBER"); - } - }); -} - -let numbers = [2, 3, 4, 5, 6]; - -numbers = numbers.map(squaredPromise); - -Promise.all(numbers) - .then(function(results) { - console.log(results); - }) - .catch(function(error) { - console.log(error); - }); - - -// WARMUP 4 -let doBadThing = function(forRealz) { - return new Promise(function(resolve, reject) { - if(forRealz == true) { - resolve("Yay!"); - } else { - reject("BOO."); - } - }); -} - -doBadThing(true) - .then(function(result) { - console.log(result); - }) - .catch(function(error) { - console.log(error); - }); - - -// FILE OPERATIONS -let fsp = { - readFile: function(path) { - return new Promise(function(resolve, reject) { - var text = fs.readFile(path, 'utf8', (error, data) => { - if (error) throw error; - resolve(data); - }); - }); - }, - - writeFile: function(path, input) { - return new Promise(function(resolve, reject) { - var text = fs.writeFile(path, input, 'utf8', (error) => { - if (error) reject(error); - resolve(fsp.readFile(path)); - }); - }); - }, - - appendFile: function(path, input) { - return new Promise(function(resolve, reject) { - var text = fs.appendFile(path, input, 'utf8', (error) => { - if (error) reject(error); - resolve(fsp.readFile(path)); - }); - }); - }, -} - - -fsp.readFile('./data/text.txt') - .then(function(data) { - console.log(data); - }) - .catch(function(error) { - console.log(error); - }); - -fsp.writeFile('./data/testy.txt', "The mouse is a big blue rabbit fox hound nugget!!!!") - .then(function(data) { - console.log("File saved! CONTENTS: " + data); - }) - .catch(function(error) { - console.log(error); - }); - -fsp.appendFile('./data/testy.txt', " MEOWWWWW!!!") - .then(function(data) { - console.log("File saved! CONTENTS: " + data); - }) - .catch(function(error) { - console.log(error); - }); +// let promise1 = new Promise(function(resolve, reject) { +// if (1===1) { +// resolve("Hello Promise!"); +// } else { +// reject("UNIVERSE BROKEN."); +// } +// }) +// .then(function(message) { +// setTimeout(function() { +// return; +// }, 1000); +// console.log(message); +// }); + + +// // WARMUP 2 +// let delay = function(milliseconds) { +// return new Promise(function(resolve, reject) { +// setTimeout(function() { +// resolve(milliseconds); +// }, milliseconds); +// }); +// } + +// let countDown = function(value) { +// let newValue = value - 100; +// if (newValue < 100) { +// newValue = 0; +// } +// console.log(newValue); +// return new Promise(function(resolve, reject) { +// resolve(delay(newValue)); +// }); +// } + +// delay(1000) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .then(countDown) +// .catch(function(error) { +// console.log(error); +// }); + + +// // WARMUP 3 +// let squaredPromise = function(number) { +// return new Promise(function(resolve, reject) { +// if (typeof number === 'number') { +// var numSquared = number * number; +// resolve(numSquared); +// } else { +// reject("NOT A NUMBER"); +// } +// }); +// } + +// let numbers = [2, 3, 4, 5, 6]; + +// numbers = numbers.map(squaredPromise); + +// Promise.all(numbers) +// .then(function(results) { +// console.log(results); +// }) +// .catch(function(error) { +// console.log(error); +// }); + + +// // WARMUP 4 +// let doBadThing = function(forRealz) { +// return new Promise(function(resolve, reject) { +// if(forRealz == true) { +// resolve("Yay!"); +// } else { +// reject("BOO."); +// } +// }); +// } + +// doBadThing(true) +// .then(function(result) { +// console.log(result); +// }) +// .catch(function(error) { +// console.log(error); +// }); + + +// // FILE OPERATIONS +// let fsp = { +// readFile: function(path) { +// return new Promise(function(resolve, reject) { +// var text = fs.readFile(path, 'utf8', (error, data) => { +// if (error) throw error; +// resolve(data); +// }); +// }); +// }, + +// writeFile: function(path, input) { +// return new Promise(function(resolve, reject) { +// var text = fs.writeFile(path, input, 'utf8', (error) => { +// if (error) reject(error); +// resolve(fsp.readFile(path)); +// }); +// }); +// }, + +// appendFile: function(path, input) { +// return new Promise(function(resolve, reject) { +// var text = fs.appendFile(path, input, 'utf8', (error) => { +// if (error) reject(error); +// resolve(fsp.readFile(path)); +// }); +// }); +// }, +// } + + +// fsp.readFile('./data/text.txt') +// .then(function(data) { +// console.log(data); +// }) +// .catch(function(error) { +// console.log(error); +// }); + +// fsp.writeFile('./data/testy.txt', "The mouse is a big blue rabbit fox hound nugget!!!!") +// .then(function(data) { +// console.log("File saved! CONTENTS: " + data); +// }) +// .catch(function(error) { +// console.log(error); +// }); + +// fsp.appendFile('./data/testy.txt', " MEOWWWWW!!!") +// .then(function(data) { +// console.log("File saved! CONTENTS: " + data); +// }) +// .catch(function(error) { +// console.log(error); +// }); // CREATE AN EVENT EMITTER FROM SCRATCH let emitter = new Emitter(); diff --git a/modules/emitter.js b/modules/emitter.js index 9a09106..d6100c0 100644 --- a/modules/emitter.js +++ b/modules/emitter.js @@ -87,7 +87,7 @@ function Emitter(eventType, callback) { return item; } }); - console.log("Current listeners: " + this.listeners); + }; //this.removeAllListeners }