Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50654 views
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
}
96
97