From fbf7f5ca0f33760f301d4ef1226954808b8e096b Mon Sep 17 00:00:00 2001 From: SamuelLangenfeld Date: Wed, 8 Nov 2017 01:14:49 -0500 Subject: [PATCH 1/4] warmup exercises --- index.js | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 19 ++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 index.js create mode 100644 package.json diff --git a/index.js b/index.js new file mode 100644 index 0000000..baaf2f4 --- /dev/null +++ b/index.js @@ -0,0 +1,86 @@ +var p =new Promise(function(resolve, reject){ + setTimeout(function(){resolve('Hello Promise!')}, 1000); +}); + +p.then(function(message, err){ + console.log(message); +}).catch(function(error){ + console.log(error); +}); + +function delay(milliseconds){ + + let prom = new Promise(function(resolve, reject){ + setTimeout(function(){resolve(milliseconds)}, milliseconds); + }) + + return prom; +} + +function countDown(number){ + console.log(number); + if (number>0){ + return number-100; + } + else + return number; +}; + +delay(1000) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown); + + +function squarePromise(number){ + let prom = new Promise(function(resolve, reject){ + if (typeof number !=="number"){ + reject("Rejected!"); + } + else + resolve(number*number); + }) + return prom; +} + +num_array=[1,2,3,4,5,6,7,8,9]; + +num_array=num_array.map(i => {return squarePromise(i)}); + +Promise.all(num_array).then(function(result){ + console.log(result); +}); + + +function doBadThing(forRealz){ + let prom = new Promise(function(resolve, reject){ + if (!forRealz){ + resolve('Yay!'); + } + else{ + reject('Rejected!'); + } + }); + return prom; +} + +doBadThing(true).then(function(result){ + console.log(result); +}, function(reject){ + console.log("This was given a rejection handler"); +}) + +doBadThing(0).then(function(result){ + console.log(result); +}) + .catch(error =>{ + console.log(error); + }); + diff --git a/package.json b/package.json new file mode 100644 index 0000000..591ba41 --- /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/SamuelLangenfeld/assignment_async_nodejs.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/SamuelLangenfeld/assignment_async_nodejs/issues" + }, + "homepage": "https://github.com/SamuelLangenfeld/assignment_async_nodejs#readme" +} From 8b488d2c30ccb8520008ede035ba03a913a2ca6c Mon Sep 17 00:00:00 2001 From: SamuelLangenfeld Date: Wed, 8 Nov 2017 10:35:55 -0500 Subject: [PATCH 2/4] finish fsp module --- data/dummy.txt | 4 ++++ data/test.txt | 2 ++ index.js | 41 +++++++++++++++++++++++++++++++++++++---- node_modules/fsp.js | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 data/dummy.txt create mode 100644 data/test.txt create mode 100644 node_modules/fsp.js diff --git a/data/dummy.txt b/data/dummy.txt new file mode 100644 index 0000000..df4e77d --- /dev/null +++ b/data/dummy.txt @@ -0,0 +1,4 @@ +This is a dummy file. +Do re mi fa so la ti do. +Father +Keep me in mind for that one thing. I haven't forgotten. I don't to spend a lot of money. Coffee is pretty acidic. \ No newline at end of file diff --git a/data/test.txt b/data/test.txt new file mode 100644 index 0000000..31d9f10 --- /dev/null +++ b/data/test.txt @@ -0,0 +1,2 @@ +Help, I'm trapped in a test file! +Hello again! \ No newline at end of file diff --git a/index.js b/index.js index baaf2f4..a7da8c9 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,6 @@ +var fsp = require('./node_modules/fsp.js'); +var fs= require('fs'); + var p =new Promise(function(resolve, reject){ setTimeout(function(){resolve('Hello Promise!')}, 1000); }); @@ -18,12 +21,15 @@ function delay(milliseconds){ } function countDown(number){ - console.log(number); if (number>0){ - return number-100; + console.log(number); + number-=100; + } + else{ + console.log("Done!"); + return undefined; } - else - return number; + return delay(number); }; delay(1000) @@ -84,3 +90,30 @@ doBadThing(0).then(function(result){ console.log(error); }); +fsp.readFile('./data/dummy.txt') + .then(function(data){ + console.log(data); + }) + .catch(function(err){ + console.log(err); + }); + +fsp.writeFile('./data/test.txt', "Help, I'm trapped in a test file!") + .then(function(res) { + // Outputs the file data + // after writing + console.log(res); + }) + .catch(function(err) { + console.error(err); + }); + +fsp.appendFile('./data/test.txt', '\nHello again!') + .then(function(res) { + // Outputs the file data + // after appending + console.log(res); + }) + .catch(function(err) { + console.error(err); + }); \ No newline at end of file diff --git a/node_modules/fsp.js b/node_modules/fsp.js new file mode 100644 index 0000000..61edfe4 --- /dev/null +++ b/node_modules/fsp.js @@ -0,0 +1,41 @@ +var fs= require('fs'); + +var readFile=function(path){ + var dataPromise = new Promise(function(resolve, reject){ + fs.readFile(path, 'utf8', function(err, data){ + if (err) throw err; + resolve(data); + }); + }); + return dataPromise; +} + +var writeFile= function(path, content){ + var writePromise = new Promise(function(resolve, reject){ + fs.writeFile(path, content, 'utf8', function(err,data){ + if (err) throw err; + resolve(content); + }) + }) + return writePromise; +}; + + +var appendFile= function(path, content){ + var appendPromise = new Promise(function(resolve, reject){ + readFile(path).then(data =>{ + let newcontent = data + content; + var endResult= writeFile(path, newcontent).then(data =>{ + resolve(data); + }); + return endResult; + }); + }) + return appendPromise; +} + +module.exports = { + readFile: readFile, + writeFile: writeFile, + appendFile: appendFile +} \ No newline at end of file From b9af4aecb7f1d364243ce464c07943c21cd9edd4 Mon Sep 17 00:00:00 2001 From: SamuelLangenfeld Date: Wed, 8 Nov 2017 22:18:15 -0500 Subject: [PATCH 3/4] finish custom emitter module --- index.js | 37 ++++++++++++++++++++++++++++++++++++- node_modules/emitter.js | 40 ++++++++++++++++++++++++++++++++++++++++ node_modules/fsp.js | 11 ++++++----- 3 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 node_modules/emitter.js diff --git a/index.js b/index.js index a7da8c9..d81170a 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,7 @@ var fsp = require('./node_modules/fsp.js'); var fs= require('fs'); +var Emitter = require('./node_modules/emitter.js'); +var emitter = new Emitter(); var p =new Promise(function(resolve, reject){ setTimeout(function(){resolve('Hello Promise!')}, 1000); @@ -116,4 +118,37 @@ fsp.appendFile('./data/test.txt', '\nHello again!') }) .catch(function(err) { console.error(err); - }); \ No newline at end of file + }); + +function firstFunc(){ + console.log("this emitter"); +}; +emitter.on("first", function(){ + console.log("this emitter"); +}); + +emitter.on("second", function(){ + console.log("is"); +}); +emitter.on("second", function(){ + console.log("always going to be"); +}); + +emitter.on("third", function(){ + console.log("totally working"); +}); + + +emitter.emit("first"); +emitter.emit("second"); +emitter.emit("third"); + +var tf=emitter.removeListener("first", firstFunc); +console.log("tf is " +tf); +emitter.emit("first"); + +emitter.on("first", firstFunc); +emitter.removeAllListeners("second"); +emitter.emit("first"); +emitter.emit("second"); +emitter.emit("third"); \ No newline at end of file diff --git a/node_modules/emitter.js b/node_modules/emitter.js new file mode 100644 index 0000000..52dfe6b --- /dev/null +++ b/node_modules/emitter.js @@ -0,0 +1,40 @@ +function Emitter(){ + + this.events=[]; + this.on = function(eventType, callback){ + var eventObj={ + eventType:eventType, + callback:callback + } + this.events.push(eventObj); + }; + + this.emit = function(eventType){ + eventsArray=this.events.filter(event=>{ + return (eventType===event.eventType); + }) + eventsArray.forEach(event=>{ + event.callback(); + }) + }; + + this.removeListener = function(eventType, callback){ + var indx= this.events.findIndex(event=>{ + return ((event.eventType===eventType)&&(event.callback.toString===callback.toString)) + }); + if (indx > -1){ + this.events.splice(indx,1); + return true; + } + return false; + }; + + this.removeAllListeners= function(eventType){ + this.events = this.events.filter(event=>{ + return event.eventType!==eventType; + }); + }; + +} + +module.exports=Emitter; \ No newline at end of file diff --git a/node_modules/fsp.js b/node_modules/fsp.js index 61edfe4..453e57b 100644 --- a/node_modules/fsp.js +++ b/node_modules/fsp.js @@ -23,14 +23,15 @@ var writeFile= function(path, content){ var appendFile= function(path, content){ var appendPromise = new Promise(function(resolve, reject){ - readFile(path).then(data =>{ - let newcontent = data + content; - var endResult= writeFile(path, newcontent).then(data =>{ - resolve(data); + var finished = readFile(path).then(data =>{ + var newcontent = data + content; + return writeFile(path, newcontent).then(newcontent=>{ + return newcontent; }); - return endResult; }); + resolve(finished); }) + return appendPromise; } From 99d08829d98448016aef6e870f726302f35d17bb Mon Sep 17 00:00:00 2001 From: SamuelLangenfeld Date: Wed, 8 Nov 2017 22:20:18 -0500 Subject: [PATCH 4/4] same values for emitter when using node's event module vs my emitter module --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index d81170a..a8f0cb0 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ var fsp = require('./node_modules/fsp.js'); var fs= require('fs'); -var Emitter = require('./node_modules/emitter.js'); +//var Emitter = require('./node_modules/emitter.js'); +var Emitter = require('events'); var emitter = new Emitter(); var p =new Promise(function(resolve, reject){