Last active
October 7, 2015 11:07
-
-
Save shesek/3155429 to your computer and use it in GitHub Desktop.
Execute multiple connect middlewares simultaneously
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
# 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 |
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
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