Skip to content

Instantly share code, notes, and snippets.

@shesek
Last active October 7, 2015 11:07
Show Gist options
  • Save shesek/3155429 to your computer and use it in GitHub Desktop.
Save shesek/3155429 to your computer and use it in GitHub Desktop.
Execute multiple connect middlewares simultaneously
# Allows to execute multiple connect middlewares simultaneously. This is useful when you have middlewares
# that run asynchronously and should run in parallel rather than in a sequence.
# The function below takes a list of middlewares (as separate arguments), and returns a new middleware that
# executes all the passed middlewares together when invoked, and calls `next()` when all of them finish.
simultaneously = (middlewares...) -> (req, res, next)->
left = middlewares.length
one = (err) -> return next err if err?; --left or do next
middleware req, res, one for middleware in middlewares
return
# (written in CoffeeScript, compiled JavaScript below)
# Example usage:
app = connect()
app.use simultaneously middleware1, middleware2
var simultaneously,
__slice = [].slice;
simultaneously = function() {
var middlewares;
middlewares = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
return function(req, res, next) {
var left, middleware, one, _i, _len;
left = middlewares.length;
one = function(err) {
if (err != null) {
return next(err);
}
return --left || next();
};
for (_i = 0, _len = middlewares.length; _i < _len; _i++) {
middleware = middlewares[_i];
middleware(req, res, one);
}
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment