root / HServer / 00.Server / 00.Program / node_modules / after / README.md
이력 | 보기 | 이력해설 | 다운로드 (2.55 KB)
1 |
# After [![Build Status][1]][2] |
---|---|
2 |
|
3 |
Invoke callback after n calls |
4 |
|
5 |
## Status: production ready |
6 |
|
7 |
## Example |
8 |
|
9 |
```js |
10 |
var after = require("after") |
11 |
var db = require("./db") // some db. |
12 |
|
13 |
var 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 |
62 |
var after = require("after") |
63 |
, next = after(3, logItWorks) |
64 |
|
65 |
next() |
66 |
next() |
67 |
next() // it works |
68 |
|
69 |
function logItWorks() { |
70 |
console.log("it works!") |
71 |
} |
72 |
``` |
73 |
|
74 |
## Example with error handling |
75 |
|
76 |
```js |
77 |
var after = require("after") |
78 |
, next = after(3, logError) |
79 |
|
80 |
next() |
81 |
next(new Error("oops")) // logs oops |
82 |
next() // 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. |
87 |
function 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 |