node_modules
.bin
accepts
after
test
.npmignore
.travis.yml
LICENCE
README.md
index.js
package.json
array-flatten
arraybuffer.slice
async-limiter
backo2
base64-arraybuffer
base64id
better-assert
blob
callsite
commander
component-bind
component-emitter
component-inherit
content-disposition
content-type
cookie
cookie-signature
debug
depd
destroy
diff
ee-first
encodeurl
engine.io
engine.io-client
engine.io-parser
escape-html
escape-string-regexp
etag
express
finalhandler
forwarded
fresh
glob
growl
has-binary2
has-cors
http-errors
indexof
inherits
ipaddr.js
isarray
jade
lru-cache
media-typer
merge-descriptors
methods
mime
mime-db
mime-types
minimatch
minimist
mkdirp
mocha
ms
negotiator
net
object-component
on-finished
parseqs
parseuri
parseurl
path-to-regexp
proxy-addr
qs
quick-local-ip
range-parser
safe-buffer
send
serve-static
setprototypeof
sigmund
socket.io
socket.io-adapter
socket.io-client
socket.io-parser
statuses
supports-color
to-array
to-iso-string
type-is
ultron
unpipe
utils-merge
vary
ws
xmlhttprequest-ssl
yeast
public
README.md
index.js
package-lock.json
package.json
After 
Invoke callback after n calls
Status: production ready
Example
var after = require("after")
var db = require("./db") // some db.
var updateUser = function (req, res) {
// use after to run two tasks in parallel,
// namely get request body and get session
// then run updateUser with the results
var next = after(2, updateUser)
var results = {}
getJSONBody(req, res, function (err, body) {
if (err) return next(err)
results.body = body
next(null, results)
})
getSessionUser(req, res, function (err, user) {
if (err) return next(err)
results.user = user
next(null, results)
})
// now do the thing!
function updateUser(err, result) {
if (err) {
res.statusCode = 500
return res.end("Unexpected Error")
}
if (!result.user || result.user.role !== "admin") {
res.statusCode = 403
return res.end("Permission Denied")
}
db.put("users:" + req.params.userId, result.body, function (err) {
if (err) {
res.statusCode = 500
return res.end("Unexpected Error")
}
res.statusCode = 200
res.end("Ok")
})
}
}
Naive Example
var after = require("after")
, next = after(3, logItWorks)
next()
next()
next() // it works
function logItWorks() {
console.log("it works!")
}
Example with error handling
var after = require("after")
, next = after(3, logError)
next()
next(new Error("oops")) // logs oops
next() // does nothing
// This callback is only called once.
// If there is an error the callback gets called immediately
// this avoids the situation where errors get lost.
function logError(err) {
console.log(err)
}
Installation
npm install after
Tests
npm test
Contributors
- Raynos
- defunctzombie