Skip to content

Instantly share code, notes, and snippets.

@mkozhukharenko
Created April 8, 2017 18:58
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 mkozhukharenko/15560d8f6532da33914e65d0dc94d1f6 to your computer and use it in GitHub Desktop.
Save mkozhukharenko/15560d8f6532da33914e65d0dc94d1f6 to your computer and use it in GitHub Desktop.
Real compose function implementation (composing middlewares)
var app = {
middlewares: [],
use(fn) {
this.middlewares.push(fn)
},
compose(middleware) {
return function (next) {
return dispatch(0)
function dispatch(i) {
let fn = middleware[i]
if (!fn) {
return
}
fn(function next() {
return dispatch(i + 1)
})
}
}
},
start() {
this.compose(this.middlewares)();
}
}
var app1 = (subapp) => {
console.log('start', 1);
subapp();
console.log('finish', 5);
}
var app2 = (subapp) => {
console.log(2);
subapp();
console.log(4);
}
var app3 = (subapp) => {
subapp()
console.log(3);
}
app.use(app1)
app.use(app2)
app.use(app3)
app.start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment