root / HServer / 00.Server / 00.Program / node_modules / ee-first / index.js
이력 | 보기 | 이력해설 | 다운로드 (1.64 KB)
1 |
/*!
|
---|---|
2 |
* ee-first
|
3 |
* Copyright(c) 2014 Jonathan Ong
|
4 |
* MIT Licensed
|
5 |
*/
|
6 |
|
7 |
'use strict'
|
8 |
|
9 |
/**
|
10 |
* Module exports.
|
11 |
* @public
|
12 |
*/
|
13 |
|
14 |
module.exports = first |
15 |
|
16 |
/**
|
17 |
* Get the first event in a set of event emitters and event pairs.
|
18 |
*
|
19 |
* @param {array} stuff
|
20 |
* @param {function} done
|
21 |
* @public
|
22 |
*/
|
23 |
|
24 |
function first(stuff, done) { |
25 |
if (!Array.isArray(stuff))
|
26 |
throw new TypeError('arg must be an array of [ee, events...] arrays') |
27 |
|
28 |
var cleanups = []
|
29 |
|
30 |
for (var i = 0; i < stuff.length; i++) { |
31 |
var arr = stuff[i]
|
32 |
|
33 |
if (!Array.isArray(arr) || arr.length < 2) |
34 |
throw new TypeError('each array member must be [ee, events...]') |
35 |
|
36 |
var ee = arr[0] |
37 |
|
38 |
for (var j = 1; j < arr.length; j++) { |
39 |
var event = arr[j]
|
40 |
var fn = listener(event, callback)
|
41 |
|
42 |
// listen to the event
|
43 |
ee.on(event, fn) |
44 |
// push this listener to the list of cleanups
|
45 |
cleanups.push({ |
46 |
ee: ee,
|
47 |
event: event,
|
48 |
fn: fn,
|
49 |
}) |
50 |
} |
51 |
} |
52 |
|
53 |
function callback() { |
54 |
cleanup() |
55 |
done.apply(null, arguments) |
56 |
} |
57 |
|
58 |
function cleanup() { |
59 |
var x
|
60 |
for (var i = 0; i < cleanups.length; i++) { |
61 |
x = cleanups[i] |
62 |
x.ee.removeListener(x.event, x.fn) |
63 |
} |
64 |
} |
65 |
|
66 |
function thunk(fn) { |
67 |
done = fn |
68 |
} |
69 |
|
70 |
thunk.cancel = cleanup |
71 |
|
72 |
return thunk
|
73 |
} |
74 |
|
75 |
/**
|
76 |
* Create the event listener.
|
77 |
* @private
|
78 |
*/
|
79 |
|
80 |
function listener(event, done) { |
81 |
return function onevent(arg1) { |
82 |
var args = new Array(arguments.length) |
83 |
var ee = this |
84 |
var err = event === 'error' |
85 |
? arg1 |
86 |
: null
|
87 |
|
88 |
// copy args to prevent arguments escaping scope
|
89 |
for (var i = 0; i < args.length; i++) { |
90 |
args[i] = arguments[i]
|
91 |
} |
92 |
|
93 |
done(err, ee, event, args) |
94 |
} |
95 |
} |