• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..12-Nov-2020-

.npmignoreH A D07-Nov-202022 32

.travis.ymlH A D07-Nov-2020122 1312

LICENCEH A D07-Nov-20201 KiB1916

README.mdH A D07-Nov-20202.6 KiB11686

package.jsonH A D07-Nov-2020550 2828

README.md

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
116