2 module.exports = function first(stuff, done) {
\r
3 if (!Array.isArray(stuff))
\r
4 throw new TypeError('arg must be an array of [ee, events...] arrays')
\r
8 for (var i = 0; i < stuff.length; i++) {
\r
11 if (!Array.isArray(arr) || arr.length < 2)
\r
12 throw new TypeError('each array member must be [ee, events...]')
\r
16 for (var j = 1; j < arr.length; j++) {
\r
18 var fn = listener(event, callback)
\r
20 // listen to the event
\r
22 // push this listener to the list of cleanups
\r
31 function callback() {
\r
33 done.apply(null, arguments)
\r
36 function cleanup() {
\r
38 for (var i = 0; i < cleanups.length; i++) {
\r
40 x.ee.removeListener(x.event, x.fn)
\r
44 function thunk(fn) {
\r
48 thunk.cancel = cleanup
\r
53 function listener(event, done) {
\r
54 return function onevent(arg1) {
\r
55 var args = new Array(arguments.length)
\r
57 var err = event === 'error'
\r
61 // copy args to prevent arguments escaping scope
\r
62 for (var i = 0; i < args.length; i++) {
\r
63 args[i] = arguments[i]
\r
66 done(err, ee, event, args)
\r