diff --git a/emit.js b/emit.js new file mode 100644 index 0000000..945889f --- /dev/null +++ b/emit.js @@ -0,0 +1,39 @@ +let emitter = function() { + //I'm not even sure I need this..... + //or if this is within the 'events' module + this.evnts = {}; + + //attach an event listener with + this.on = (eventType, callback) => { + if (eventType) { + if (!Array.isArray(this.evnts[eventType])) { + this.evnts[eventType] = []; + } + } + this.evnts[eventType].push(callback); + }; + //attach subsequent listeners with emitter.on + + //Emit an event with + this.emit = eventType => this.evnts[eventType].forEach(val => val.call()); + //This should result in all listeners attached + //to that event being invoked + + //Remove a listener + this.removeListener = (eventType, callback) => { + this.evnts[eventType].forEach(val => { + if (val === callback) { + this.evnts[eventType].splice(val, 1); + console.log('Listener deleted'); + } + }); + }; + + //Remove all listeners on an event + this.removeAllListeners = eventType => { + delete this.evnts[eventType]; + console.log('All listeners deleted'); + }; +}; + +module.exports = emitter; diff --git a/fsp.js b/fsp.js new file mode 100644 index 0000000..9377a43 --- /dev/null +++ b/fsp.js @@ -0,0 +1,43 @@ +'use strict'; + +const fs = require('fs'); + +let fsp = {}; + +fsp.readFile = function(path) { + return new Promise(function(resolve, reject) { + fs.readFile(path, 'utf8', function(err, data) { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +}; + +fsp.writeFile = function(path, data) { + return new Promise(function(resolve, reject) { + fs.writeFile(path, data, function(err) { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +}; + +fsp.appendFile = function(path, data) { + return new Promise(function(resolve, reject) { + fs.appendFile(path, data, function(err) { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +}; + +module.exports = fsp; diff --git a/index.js b/index.js new file mode 100644 index 0000000..4d1f0ae --- /dev/null +++ b/index.js @@ -0,0 +1,119 @@ +'use strict'; +const fs = require('fs'); +const fsp = require('./fsp.js'); +const Emitter = require('./emit.js'); +let emitter = new Emitter(); +const nativeEmitter = require('events'); + +var hello = new Promise((resolve, reject) => { + setTimeout(resolve('Hello Promise!'), 1000); +}); + +hello.then(message => console.log(message)).catch(err => console.error(err)); + +let delay = milliseconds => { + return new Promise(function(resolve, reject) { + setTimeout(() => { + if (milliseconds > 0) { + resolve(milliseconds); + } else { + reject('Done'); + } + }, milliseconds); + }); +}; + +let countDown = result => { + if (result > 0) { + console.log(result); + return (result -= 100); + } else { + console.log('Done!'); + } +}; + +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! + +let square = val => { + return new Promise((resolve, reject) => { + if (val !== undefined && typeof val === 'number') { + resolve(Math.pow(val, 2)); + } else { + reject('No bueno'); + } + }); +}; + +let numArray = [1, 2, 3, 4, 5, 6, 7, 8, 9]; + +numArray = numArray.map(square); + +Promise.all(numArray).then(val => console.log(val)); + +let doBadThing = forRealz => { + return new Promise((resolve, reject) => { + if (forRealz) { + reject('Booo'); + } else { + resolve('Yay'); + } + }); +}; + +doBadThing('jefe').then( + resolve => { + console.log(resolve); + }, + reject => { + try { + throw reject; + } catch (err) { + console.error(err); + } + } +); +doBadThing(21) + .then(result => console.log('!!' + result)) + .catch(err => console.error(err)); + +fsp + .readFile('./lorem.txt') + .then(data => console.log(data)) + .catch(err => console.error(err)); + +fsp + .writeFile('./lorem.txt', 'Hello!') + .then(res => console.log(res)) + .catch(err => console.error(err)); + +fsp + .appendFile('./lorem.txt', 'Hello Again!') + .then(res => console.log(res)) + .catch(err => console.error(err)); + +let clocked = () => console.log('clocked'); + +emitter.on('clock', clocked); + +emitter.on('clock', () => console.log('Its alive')); + +emitter.emit('clock'); + +emitter.removeListener('clock', clocked); + +emitter.emit('clock'); + +emitter.removeAllListeners('clock'); + +console.log(emitter); diff --git a/lorem.txt b/lorem.txt new file mode 100644 index 0000000..e30c156 --- /dev/null +++ b/lorem.txt @@ -0,0 +1 @@ +Hello!Hello Again! \ No newline at end of file