|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- # After [![Build Status][1]][2]
-
- Invoke callback after n calls
-
- ## Status: production ready
-
- ## Example
-
- ```js
- 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
-
- ```js
- var after = require("after")
- , next = after(3, logItWorks)
-
- next()
- next()
- next() // it works
-
- function logItWorks() {
- console.log("it works!")
- }
- ```
-
- ## Example with error handling
-
- ```js
- 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
-
- ## MIT Licenced
-
- [1]: https://secure.travis-ci.org/Raynos/after.png
- [2]: http://travis-ci.org/Raynos/after
- [3]: http://raynos.org/blog/2/Flow-control-in-node.js
- [4]: http://stackoverflow.com/questions/6852059/determining-the-end-of-asynchronous-operations-javascript/6852307#6852307
- [5]: http://stackoverflow.com/questions/6869872/in-javascript-what-are-best-practices-for-executing-multiple-asynchronous-functi/6870031#6870031
- [6]: http://stackoverflow.com/questions/6864397/javascript-performance-long-running-tasks/6889419#6889419
- [7]: http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js/6620091#6620091
- [8]: http://github.com/Raynos/iterators
- [9]: http://github.com/Raynos/composite
|