root / HServer / 00.Server / 00.Program / node_modules / after / README.md
이력 | 보기 | 이력해설 | 다운로드 (2.55 KB)
1 | 39 | HKM | # 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 |