arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
socketioMEANseed/server/node_modules/after/README.md
server/node_modules/after/README.mdRaw
  1# After [![Build Status][1]][2]
  2
  3Invoke callback after n calls
  4
  5## Status: production ready
  6
  7## Example
  8
  9```js
 10var after = require("after")
 11var db = require("./db") // some db.
 12
 13var updateUser = function (req, res) {
 14  // use after to run two tasks in parallel,
 15  // namely get request body and get session
 16  // then run updateUser with the results
 17  var next = after(2, updateUser)
 18  var results = {}
 19  
 20  getJSONBody(req, res, function (err, body) {
 21    if (err) return next(err)
 22    
 23    results.body = body
 24    next(null, results)
 25  })
 26  
 27  getSessionUser(req, res, function (err, user) {
 28    if (err) return next(err)
 29    
 30    results.user = user
 31    next(null, results)
 32  })
 33  
 34  // now do the thing!
 35  function updateUser(err, result) {
 36    if (err) {
 37      res.statusCode = 500
 38      return res.end("Unexpected Error")
 39    }
 40    
 41    if (!result.user || result.user.role !== "admin") {
 42      res.statusCode = 403
 43      return res.end("Permission Denied")
 44    }
 45    
 46    db.put("users:" + req.params.userId, result.body, function (err) {
 47      if (err) {
 48        res.statusCode = 500
 49        return res.end("Unexpected Error")
 50      }
 51      
 52      res.statusCode = 200
 53      res.end("Ok")  
 54    })   
 55  }
 56}
 57```
 58
 59## Naive Example
 60
 61```js
 62var after = require("after")
 63    , next = after(3, logItWorks)
 64
 65next()
 66next()
 67next() // it works
 68
 69function logItWorks() {
 70    console.log("it works!")
 71}
 72```
 73
 74## Example with error handling
 75
 76```js
 77var after = require("after")
 78    , next = after(3, logError)
 79
 80next()
 81next(new Error("oops")) // logs oops
 82next() // does nothing
 83
 84// This callback is only called once.
 85// If there is an error the callback gets called immediately
 86// this avoids the situation where errors get lost.
 87function logError(err) {
 88    console.log(err)
 89}
 90```
 91
 92## Installation
 93
 94`npm install after`
 95
 96## Tests
 97
 98`npm test`
 99
100## Contributors
101
102 - Raynos
103 - defunctzombie
104
105## MIT Licenced
106
107  [1]: https://secure.travis-ci.org/Raynos/after.png
108  [2]: http://travis-ci.org/Raynos/after
109  [3]: http://raynos.org/blog/2/Flow-control-in-node.js
110  [4]: http://stackoverflow.com/questions/6852059/determining-the-end-of-asynchronous-operations-javascript/6852307#6852307
111  [5]: http://stackoverflow.com/questions/6869872/in-javascript-what-are-best-practices-for-executing-multiple-asynchronous-functi/6870031#6870031
112  [6]: http://stackoverflow.com/questions/6864397/javascript-performance-long-running-tasks/6889419#6889419
113  [7]: http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js/6620091#6620091
114  [8]: http://github.com/Raynos/iterators
115  [9]: http://github.com/Raynos/composite