Skip to content

Submitting Async Node assignment #55

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@




node_modules/
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
# assignment_async_nodejs
Async Node.js sprint
Hi.. This is Lakshmi Maduri
3 changes: 3 additions & 0 deletions data/lorem.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.


1 change: 1 addition & 0 deletions data/write_here.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hello
38 changes: 38 additions & 0 deletions emitter.js
Original file line number Diff line number Diff line change
@@ -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;
44 changes: 44 additions & 0 deletions fsp.js
Original file line number Diff line number Diff line change
@@ -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;
162 changes: 162 additions & 0 deletions promises.js
Original file line number Diff line number Diff line change
@@ -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"));