Skip to content
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

assignment_async_nodejs #47

Open
wants to merge 7 commits 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
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,18 @@
# assignment_async_nodejs
Async Node.js sprint
Jared Gebel
9/8/2017

Promises, File Operations, and Event Emitters
Promises
index.js

File Operations
fspTest.js
./data/lorem.txt
./data/test.txt
./lib/fsp.js

Reverse Engineering Node.js Event Emitter
./lib/emitter-mode.js
emitter.js
1 change: 1 addition & 0 deletions data/lorem.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Lorem ipso, this is text.
1 change: 1 addition & 0 deletions data/test.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello!again!
27 changes: 27 additions & 0 deletions emitterTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
var Emitter = require("./lib/emitter");
var emitter = Emitter;

var print = function(str) {
console.log(str);
};

emitter.on("click", function() {
console.log("click has fired");
});

emitter.on("pop", function() {
console.log("pop has fired");
});

emitter.emit("click");
emitter.emit("pop");

emitter.removeListener("click");

emitter.emit("click");
emitter.emit("pop");

emitter.on("click", function() {
console.log("click has fired");
});
emitter.emit("click");
34 changes: 34 additions & 0 deletions fspTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
var fs = require("fs");
var fsp = require("./lib/fsp");

fsp
.readFile("./data/lorem.txt")
.then(function(data) {
// Outputs the file data
console.log(data);
})
.catch(function(err) {
console.error(err);
});

fsp
.writeFile("./data/test.txt", "Hello!")
.then(function(res) {
// Outputs the file data
// after writing
console.log(res);
})
.catch(function(err) {
console.error(err);
});

fsp
.appendFile("./data/test.txt", "Hello again!")
.then(function(res) {
// Outputs the file data
// after appending
console.log(res);
})
.catch(function(err) {
console.error(err);
});
86 changes: 86 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
// 1. Create a promise that resolves the message "Hello Promise!" after 1 second
var p = Promise.resolve("Hello Promise!");
p.then(function(message) {
setTimeout(function() {
console.log(message);
}, 1000);
});

// 2. Create a function delay that returns a promise that resolves the value milliseconds after delaying for the specified number of milliseconds
var delay = function(milliseconds) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(milliseconds);
}, milliseconds);
});
};

var countDown = function(t) {
console.log(t);
return delay((t -= 100));
};

delay(1000)
.then(countDown) //=> 1000
.then(countDown) //=> 900
.then(countDown) //=> 800
.then(countDown) //=> 700
.then(countDown) //=> 600
.then(countDown) //=> 500
.then(countDown) //=> 400
.then(countDown) //=> 300
.then(countDown) //=> 200
.then(countDown) //=> 100
.then(countDown); //=> Done!

// 3. Create a function that accepts a number and returns a promise that resolves that number squared

var squared = function(number) {
if (number !== "NaN") {
return number * number;
} else {
// can't get it to throw error beyond NaN
throw "Your input is not a number.";
}
};

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
array = array.map(function(i) {
return Promise.resolve(squared(i));
});

Promise.all(array).then(
function(results) {
console.log(results);
},
function(err) {
console.log(err);
}
);

// 4. Create a function with signature doBadThing(forRealz)
var doBadThing = function(bool) {
if (bool === false) {
return Promise.resolve("Yay!");
} else {
return Promise.reject("No");
}
};

var forRealz = true;
doBadThing(forRealz)
.then(function(results) {
console.log(results);
})
.catch(function(err) {
console.log(err);
});

var forRealz = false;
doBadThing(forRealz)
.then(function(results) {
console.log(results);
})
.catch(function(err) {
console.log(err);
});
31 changes: 31 additions & 0 deletions lib/emitter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
var emitter = {
events: {},

on: function(eventType, callback) {
// If event type does not exist, create a new [eventType] array in events object
if (!this.events[eventType]) {
this.events[eventType] = [];
}

this.events[eventType].push(callback);
},
emit: function(eventType) {
var event = this.events[eventType];
if (event) {
event.forEach(function(callback) {
callback.call();
});
}
},

removeListener: function(eventType) {
var event = this.events[eventType];
event.shift();
},

removeAllListeners: function() {
this.events = {};
}
};

module.exports = emitter;
34 changes: 34 additions & 0 deletions lib/fsp.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
var fs = require("fs");

var _data;

var fsp = {
readFile: function(path) {
return new Promise(function(resolve, reject) {
fs.readFile(path, "utf8", function(err, data) {
_data = data;
err ? reject(err) : resolve(data);
});
});
},

writeFile: function(path, data) {
return new Promise(function(resolve, reject) {
fs.writeFile(path, data, function(err, data) {
_data = data;
err ? reject(err) : resolve(data);
});
});
},

appendFile: function(path, data) {
return new Promise(function(resolve, reject) {
fs.appendFile(path, data, function(err, data) {
_data = data;
err ? reject(err) : resolve(data);
});
});
}
};

module.exports = fsp;
23 changes: 23 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "assignment_async_nodejs",
"version": "1.0.0",
"description": "Async Node.js sprint\r Jared Gebel\r 9/8/2017",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "https",
"url": "https://github.com/jaredjgebel/assignment_async_nodejs"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/jaredjgebel/assignment_async_nodejs"
},
"homepage": "https://github.com/jaredjgebel/assignment_async_nodejs#readme",
"dependencies": {
"events": "^1.1.1",
"fs": "0.0.1-security"
}
}