Skip to content

Instantly share code, notes, and snippets.

@aliaksandr-s
Created November 25, 2017 10:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aliaksandr-s/b3872899b227c9c6101da5b8caa54b71 to your computer and use it in GitHub Desktop.
Save aliaksandr-s/b3872899b227c9c6101da5b8caa54b71 to your computer and use it in GitHub Desktop.
// 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