From 7837e499bb743b2ace97fff188552d514d5d39d3 Mon Sep 17 00:00:00 2001 From: Thomas Hauge Date: Thu, 31 Aug 2017 06:31:45 +0200 Subject: [PATCH 1/3] so many promises --- promises.js | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 promises.js diff --git a/promises.js b/promises.js new file mode 100644 index 0000000..f80b7d8 --- /dev/null +++ b/promises.js @@ -0,0 +1,75 @@ +// 1. +// var p = Promise.resolve('Hello Promise!'); +// +// p.then(function(message) { +// setTimeout(function() { +// console.log(message); +// }, 1000); +// }); + +// 2. +var delay = function(milliseconds) { + return new Promise(function(resolve, reject) { + setTimeout(function() { + resolve(milliseconds); + }, milliseconds); + }); +}; + +var countDown = function(milliseconds) { + if (milliseconds > 0) { + console.log(milliseconds); + return delay(milliseconds - 100); + } else { + console.log('Done!'); + }; +}; + +// 3. +var square = function(num) { + return new Promise(function(resolve, reject) { + if (typeof num === "number") { + resolve(num*num); + } else { + reject("Not a number"); + }; + }); +}; + +var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]; +nums = nums.map(function(i) { + return square(i); +}); + +Promise.all(nums) + .then(function(results) { + console.log(results); + }, function(err) { + console.error(err); + }); + +// 4. +var doBadThing = function(forRealz) { + return new Promise(function(resolve, reject) { + if (!forRealz) { + resolve("Yay!"); + } else { + reject("Nay!"); + }; + }); +}; + +doBadThing(true).then(function(result) { + console.log(result); +}, function(err) { + console.error(err); +}); + +doBadThing(false) + .then(function(result) { + console.log(result); + throw "Error!"; + }) + .catch(function(err) { + console.error(err); + }); From 4e7ddd6bd2c3597bb8c628aa4d2d30ef666eb25f Mon Sep 17 00:00:00 2001 From: Thomas Hauge Date: Thu, 31 Aug 2017 07:23:27 +0200 Subject: [PATCH 2/3] operate on those files --- data/lorem.txt | 1 + data/test.txt | 1 + file_io.js | 25 +++++++++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 data/lorem.txt create mode 100644 data/test.txt create mode 100644 file_io.js diff --git a/data/lorem.txt b/data/lorem.txt new file mode 100644 index 0000000..9fded54 --- /dev/null +++ b/data/lorem.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod. diff --git a/data/test.txt b/data/test.txt new file mode 100644 index 0000000..b861aad --- /dev/null +++ b/data/test.txt @@ -0,0 +1 @@ +Hello!Hello again! \ No newline at end of file diff --git a/file_io.js b/file_io.js new file mode 100644 index 0000000..8fa7505 --- /dev/null +++ b/file_io.js @@ -0,0 +1,25 @@ +var fs = require('fs'); + +var fsp = { + readFile: function(path) { + return new Promise(function(resolve, reject) { + fs.readFile(path, 'utf8', function(err, data) { + err ? console.error(err) : resolve(data); + }); + }); + }, + writeFile: function(path, text) { + return new Promise(function(resolve, reject) { + fs.writeFile(path, text, 'utf8', function(err, data) { + err ? console.error(err) : resolve(fsp.readFile(path)); + }); + }); + }, + appendFile: function(path, text) { + return new Promise(function(resolve, reject) { + fs.appendFile(path, text, 'utf8', function(err, data) { + err ? console.error(err) : resolve(fsp.readFile(path)); + }); + }); + } +}; From 047064e5221baf36f770eda763b212cd167840f6 Mon Sep 17 00:00:00 2001 From: Thomas Hauge Date: Thu, 31 Aug 2017 08:49:48 +0200 Subject: [PATCH 3/3] homemade event emitter --- emitter.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 emitter.js diff --git a/emitter.js b/emitter.js new file mode 100644 index 0000000..addf2be --- /dev/null +++ b/emitter.js @@ -0,0 +1,32 @@ +var Emitter = function() { + this.listeners = {}; + + this.on = function(eventType, callback) { + if (this.listeners[eventType] === undefined) { + this.listeners[eventType] = []; + }; + this.listeners[eventType].push(callback); + }; + + this.emit = function(eventType) { + var callbacks = this.events[eventType]; + if (callbacks !== undefined) { + callbacks.forEach(function(callback) { + callback(); + }); + }; + }; + + this.removeListener = function(eventType, callback) { + var i = this.listeners[eventType].indexOf(callback); + if (i !== -1) { + this.listeners[eventType].splice(i, 1); + }; + }; + + this.removeAllListeners = function(eventType) { + delete this.listeners[eventType]; + }; +}; + +module.exports = Emitter;