From cc4c2c9736f86d192bdc3d9ecb806e2125abd8e3 Mon Sep 17 00:00:00 2001 From: ser Date: Fri, 22 Nov 2019 08:27:16 +0200 Subject: [PATCH 1/2] work, but some tests failed --- Exercises/1-pipe.js | 7 ++++++- Exercises/2-compose.js | 25 ++++++++++++++++++++++- Exercises/2-compose2.js | 45 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 Exercises/2-compose2.js diff --git a/Exercises/1-pipe.js b/Exercises/1-pipe.js index d09882a..37ee6af 100644 --- a/Exercises/1-pipe.js +++ b/Exercises/1-pipe.js @@ -1,5 +1,10 @@ 'use strict'; -const pipe = (...fns) => x => null; +const pipe = (...fns) => { + fns.forEach(x => { + if (typeof x !== 'function') throw new Error('arg must be a function'); + }); + return num => fns.reduce((val, fn) => fn(val), num); +}; module.exports = { pipe }; diff --git a/Exercises/2-compose.js b/Exercises/2-compose.js index 368e521..3244067 100644 --- a/Exercises/2-compose.js +++ b/Exercises/2-compose.js @@ -1,5 +1,28 @@ 'use strict'; -const compose = (...fns) => x => null; +const compose = (...fns) => { + const events = {}; + const fn = num => { + return fns.reverse().reduce((val, fn) => { + try { + return fn(val); + } catch (e) { + fn.emmit('error', e) + return undefined; + } + }, num); + }; + fn.on = (event, callback) => { + let res = events[event]; + if (!res) res = []; + res.push(callback); + events[event] = res; + } + fn.emmit = (event, ...args) => { + const res = events[event]; + if (res) res.forEach(callback => callback(...args)); + } + return fn; +}; module.exports = { compose }; diff --git a/Exercises/2-compose2.js b/Exercises/2-compose2.js new file mode 100644 index 0000000..69cbd37 --- /dev/null +++ b/Exercises/2-compose2.js @@ -0,0 +1,45 @@ +'use strict'; + +const compose = (...fns) => { + const events = {}; + const err = []; + fns.forEach(x => { + if (typeof x !== 'function') { + err.push(new Error(`${x} not a function`)); + }; + }); + const fn = num => { + if (err) fn.emmit('error', err); + return fns.reduce((val, fn) => { + if (typeof fn === 'function') { + return fn(val); + } else return undefined; + }, num); + }; + fn.on = (event, callback) => { + let res = events[event]; + if (!res) res = []; + res.push(callback); + events[event] = res; + } + fn.emmit = (event, ...args) => { + const res = events[event]; + if (res) { + res.forEach(callback => callback(...args)); + } + } + return fn; +}; + +const inc = x => ++x; +const twice = x => x * 2; +const cube = x => x ** 3; +const f1 = compose(inc, 7, 9); +f1.on('error', err => { + console.log(err); +}); +console.log(f1(5)); +const f2 = compose(inc, twice, cube); +console.log(f2(5)); + +module.exports = { compose }; From 678c1f1bc9e07a95aea729279cbe7234ceeab9b8 Mon Sep 17 00:00:00 2001 From: ser Date: Fri, 22 Nov 2019 21:14:22 +0200 Subject: [PATCH 2/2] done compose --- Exercises/2-compose.js | 31 +++++++++++----------------- Exercises/2-compose2.js | 45 ----------------------------------------- 2 files changed, 12 insertions(+), 64 deletions(-) delete mode 100644 Exercises/2-compose2.js diff --git a/Exercises/2-compose.js b/Exercises/2-compose.js index 3244067..313baf8 100644 --- a/Exercises/2-compose.js +++ b/Exercises/2-compose.js @@ -2,26 +2,19 @@ const compose = (...fns) => { const events = {}; - const fn = num => { - return fns.reverse().reduce((val, fn) => { - try { - return fn(val); - } catch (e) { - fn.emmit('error', e) - return undefined; - } - }, num); - }; + const fn = num => fns.reverse().reduce((val, f) => { + try { + if (typeof val === 'undefined') return undefined; + return f(val); + } catch (e) { + const err = events['error']; + if (err) err(e); + return undefined; + } + }, num); fn.on = (event, callback) => { - let res = events[event]; - if (!res) res = []; - res.push(callback); - events[event] = res; - } - fn.emmit = (event, ...args) => { - const res = events[event]; - if (res) res.forEach(callback => callback(...args)); - } + events[event] = callback; + }; return fn; }; diff --git a/Exercises/2-compose2.js b/Exercises/2-compose2.js deleted file mode 100644 index 69cbd37..0000000 --- a/Exercises/2-compose2.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -const compose = (...fns) => { - const events = {}; - const err = []; - fns.forEach(x => { - if (typeof x !== 'function') { - err.push(new Error(`${x} not a function`)); - }; - }); - const fn = num => { - if (err) fn.emmit('error', err); - return fns.reduce((val, fn) => { - if (typeof fn === 'function') { - return fn(val); - } else return undefined; - }, num); - }; - fn.on = (event, callback) => { - let res = events[event]; - if (!res) res = []; - res.push(callback); - events[event] = res; - } - fn.emmit = (event, ...args) => { - const res = events[event]; - if (res) { - res.forEach(callback => callback(...args)); - } - } - return fn; -}; - -const inc = x => ++x; -const twice = x => x * 2; -const cube = x => x ** 3; -const f1 = compose(inc, 7, 9); -f1.on('error', err => { - console.log(err); -}); -console.log(f1(5)); -const f2 = compose(inc, twice, cube); -console.log(f2(5)); - -module.exports = { compose };