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 new file mode 100644 index 0000000..a8f0cb0 --- /dev/null +++ b/index.js @@ -0,0 +1,155 @@ +var fsp = require('./node_modules/fsp.js'); +var fs= require('fs'); +//var Emitter = require('./node_modules/emitter.js'); +var Emitter = require('events'); +var emitter = new Emitter(); + +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){ + if (number>0){ + console.log(number); + number-=100; + } + else{ + console.log("Done!"); + return undefined; + } + return delay(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); + }); + +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); + }); + +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 new file mode 100644 index 0000000..453e57b --- /dev/null +++ b/node_modules/fsp.js @@ -0,0 +1,42 @@ +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){ + var finished = readFile(path).then(data =>{ + var newcontent = data + content; + return writeFile(path, newcontent).then(newcontent=>{ + return newcontent; + }); + }); + resolve(finished); + }) + + return appendPromise; +} + +module.exports = { + readFile: readFile, + writeFile: writeFile, + appendFile: appendFile +} \ No newline at end of file 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" +}