diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7543828 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ + + + + +node_modules/ diff --git a/README.md b/README.md index c32c34d..3baca34 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # assignment_async_nodejs Async Node.js sprint +Hi.. This is Lakshmi Maduri diff --git a/data/lorem.txt b/data/lorem.txt new file mode 100644 index 0000000..54deb99 --- /dev/null +++ b/data/lorem.txt @@ -0,0 +1,3 @@ +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod. + + diff --git a/data/write_here.txt b/data/write_here.txt new file mode 100644 index 0000000..b6fc4c6 --- /dev/null +++ b/data/write_here.txt @@ -0,0 +1 @@ +hello \ No newline at end of file diff --git a/emitter.js b/emitter.js new file mode 100644 index 0000000..7c38ea5 --- /dev/null +++ b/emitter.js @@ -0,0 +1,38 @@ +function EventEmitter() { + this.events = {}; +} + +EventEmitter.prototype.on = function(eventType, callback) { + this.events[eventType] = this.events[eventType] || []; + this.events[eventType].push(callback); +}; + +EventEmitter.prototype.emit = function(eventType) { + if(this.events[eventType].length > 0){ + this.events[eventType].forEach(function(callback) { + callback(); + }); + return true; + }else{ + console.log("Listener of type " +eventType+ " has been removed"); + return false; + } +}; + +EventEmitter.prototype.removeEventListener = function(eventType, callback = function(){}){ + var index = this.events[eventType].indexOf(eventType); + this.events[eventType].splice(index, 1); +}; + +EventEmitter.prototype.removeAllListeners = function(eventType = ""){ + if (eventType === ""){ + this.events[eventType] = []; + }else{ + this.events[eventType] = this.events[eventType].filter(function(event_type){ + event_type !== eventType; + }); + } +}; + + +module.exports = EventEmitter; diff --git a/fsp.js b/fsp.js new file mode 100644 index 0000000..c00ba3b --- /dev/null +++ b/fsp.js @@ -0,0 +1,44 @@ +var fs = require('fs'); + +var promise_obj = { + readFile: function(path, encoding = 'utf-8'){ + return new Promise(function(resolve, reject){ + if (path === './data/lorem.txt'){ + var data = fs.readFileSync(path, encoding); + resolve(data); + }else{ + setTimeout(reject('Invalid path'),5000); + } + }); + }, + writeFile: function(path, data, encoding = 'utf-8'){ + return new Promise(function(resolve, reject){ + if (path === './data/write_here.txt'){ + resolve(fs.writeFile(path, data, encoding, function(err){ + if(err){ + console.log(err); + }else{ + console.log("Write succeeded!"); + } + })); + }else{ + reject('Write path is invalid'); + } + }); + }, + + appendFile: function(path, data, encoding = 'utf-8'){ + return new Promise(function(resolve, reject){ + if (path === './data/write_here.txt'){ + resolve(fs.appendFile(path, data, encoding = 'utf-8', function(err){ + (err)?console.log(err):console.log("append was successful!"); + })); + }else{ + reject('Invalid file to append data'); + } + }); + } +}; + + +module.exports = promise_obj; diff --git a/promises.js b/promises.js new file mode 100644 index 0000000..3f87195 --- /dev/null +++ b/promises.js @@ -0,0 +1,162 @@ +//Simple Promise that resolves to hello world +var p = Promise.resolve("Hello Promise!"); +//Resolving the above promise using then +p.then(function(message){ + setTimeout(function(){ + console.log(message)}, 1000); + }); + +// Working code +// function delay(milliseconds){ +// return new Promise(function(resolve, reject){ +// resolve(setTimeout(function(){ +// console.log(milliseconds) +// }, milliseconds)); +// }); +// } + +//Working code +function delay(ms) { + return new Promise(resolve => { + setTimeout(() => { + resolve(ms > 0 ? ms : 'Done!'); + }, ms); + }); +} + +function countDown(ms) { + console.log(ms); + return delay(ms - 100); +} + +delay(300) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown) + .then(countDown); + + +//Function that returns a Promise +function squared(num){ + return new Promise( + function(resolve, reject){ + if (typeof num === 'number'){ + var op = num*num; + resolve(op); + }else{ + var err = 'Input is not a number!'; + reject(err); + } + } +); +} + +//Promise is resolved +squared(3) +.then(function(result){ + console.log(result); +}, +function(error){ + console.log(error); +}); + +//Array of promises +var arr = [1,2,3,4,5,6,7,8,9]; +var arr_promises = arr.map(function(elem){ + return squared(elem); + }); + + //Array of promises resolved + Promise.all(arr_promises) + .then(function(results){ + console.log(results); + }); + +//Working code - Using catch and then +function doBadThing(forRealz){ + return new Promise(function(resolve, reject){ + if (forRealz === false){ + resolve('Yay!'); + }else{ + reject('error'); + } + }); +} + +doBadThing(false) +.then(function(result){ + console.log(result); +}, +function(error){ + console.error(error); +}); + +//*****catch not triggered***** +doBadThing(true) + .then(function(result){ + console.log(result); + throw "Trigger the catch!"; + }) + .catch(function(err){ + console.error(err); + }); + +//Working code +var fsp = require('./fsp'); +fsp.readFile('./data/lorem.txt') +.then(function(result){ + console.log(result); +}) +.catch(function(err){ + console.error(err); +}); + +fsp.writeFile('./data/write_here.txt', 'hello') +.then(function(result){ + console.log(result); +}) +.catch(function(err){ + console.log(err); +}); + +//throwing error +fsp.appendFile('./data/write_here.tx', ' File operations succeeded!') +.then(function(result){ + console.log(result); +}) +.catch(function(err){ + console.log(err); + //throw "Append failed!"; +}); + +//Event Emitter + var Emitter = require('./emitter'); + //debugger; + var emitter = new Emitter(); + //emitter.on('shout'); + + emitter.on("click", function(){ + console.log("hellooo!"); + //debugger; + }); + + emitter.on("scream", function(){ + console.log("Errrrrrr!!!"); + //debugger; + }); + + + emitter.emit("scream"); + + emitter.emit("click"); + + emitter.removeEventListener("click", function(){ + console.log("Removed Listener"); + }); + + emitter.emit("click"); + + emitter.removeAllListeners(); + +console.log(emitter.emit("click"));