Created
November 25, 2017 10:08
-
-
Save aliaksandr-s/b3872899b227c9c6101da5b8caa54b71 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// user | |
const User = (age, name) => (msg) => { | |
const state = [age, name]; | |
return msg(state) | |
} | |
const getAge = (arr) => arr[0]; | |
const getName = (arr) => arr[1]; | |
const getInfo = (arr) => `${arr[0]} ${arr[1]}`; | |
// logger | |
const Logger = (info) => (msg) => { | |
return (payload) => msg(info, payload); | |
} | |
// bus | |
const Bus = (subscriptions) => (msg) => { | |
return msg(subscriptions); | |
} | |
const subscribe = (subscriptions) => (type, func) => { | |
return Bus([...subscriptions, [type, func]]); | |
} | |
const dispatch = (subscriptions) => (type, payload) => { | |
const func = subscriptions.find(subscr => subscr[0] === type)[1] | |
return func(payload); | |
} | |
const logger1 = Logger("Loggging age:")(console.log); | |
const logger2 = Logger("Loggging name:")(console.log); | |
let bus = Bus([]); | |
bus = bus(subscribe)("log1", logger1); | |
bus = bus(subscribe)("log2", logger2); | |
const vasya = User(20, "vasya") | |
bus(dispatch)("log1", vasya(getAge)); | |
bus(dispatch)("log2", vasya(getName)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment