Middleware solution for https://github.com/kolodny/exercises/tree/master/middleware
var store = this;
class Middleware {
constructor() {
this.stages = [];
}
use(stage) {
this.stages.push(stage);
}
go(callback) {
var executeStage = (idx) => {
console.log(idx);
if (idx === this.stages.length) {
if (callback) callback();
return;
}
var stage = this.stages[idx];
stage.call(stage, (err) => {
if (err) {
if (callback) callback(err);
return;
}
idx++;
executeStage(idx);
});
};
executeStage(0);
}
}
var middleware = new Middleware();
middleware.use(function(next) {
setTimeout(function() {
console.log('hook1');
store.hook1 = true;
next();
}, 10000);
});
middleware.use(function(next) {
setTimeout(function() {
console.log('hook2');
store.hook2 = true;
next();
}, 10);
});
console.log(middleware.stages);
var start = new Date();
middleware.go(function() {
console.log(store.hook1); // true
console.log(store.hook2); // true
console.log(new Date() - start); // around 20
});