index.js
function first (stuff, done) {
  if (!Array.isArray(stuff)) {
    throw new TypeError('arg must be an array of [ee, events...] arrays')
  }

  var cleanups = []

  for (var i = 0; i < stuff.length; i++) {
    var arr = stuff[i]

    if (!Array.isArray(arr) || arr.length < 2) {
      throw new TypeError('each array member must be [ee, events...]')
    }

    var ee = arr[0]

    for (var j = 1; j < arr.length; j++) {
      var event = arr[j]
      var fn = listener(event, callback)

      // listen to the event
      ee.on(event, fn)
      // push this listener to the list of cleanups
      cleanups.push({
        ee: ee,
        event: event,
        fn: fn
      })
    }
  }

  function callback () {
    cleanup()
    done.apply(null, arguments)
  }

  function cleanup () {
    var x
    for (var i = 0; i < cleanups.length; i++) {
      x = cleanups[i]
      x.ee.removeListener(x.event, x.fn)
    }
  }

  function thunk (fn) {
    done = fn
  }

  thunk.cancel = cleanup

  return thunk
}
function first (stuff, done) {
  if (!Array.isArray(stuff)) {
    throw new TypeError('arg must be an array of [ee, events...] arrays')
  }

  var cleanups = []

  for (var i = 0; i < stuff.length; i++) {
    var arr = stuff[i]

    if (!Array.isArray(arr) || arr.length < 2) {
      throw new TypeError('each array member must be [ee, events...]')
    }

    var ee = arr[0]

    for (var j = 1; j < arr.length; j++) {
      var event = arr[j]
      var fn = listener(event, callback)

      // listen to the event
      ee.on(event, fn)
      // push this listener to the list of cleanups
      cleanups.push({
        ee: ee,
        event: event,
        fn: fn
      })
    }
  }

  function callback () {
    cleanup()
    done.apply(null, arguments)
  }

  function cleanup () {
    var x
    for (var i = 0; i < cleanups.length; i++) {
      x = cleanups[i]
      x.ee.removeListener(x.event, x.fn)
    }
  }

  function thunk (fn) {
    done = fn
  }

  thunk.cancel = cleanup

  return thunk
}
function first ( stuff , done ) { if ( ! Array . isArray ( stuff ) ) { throw new TypeError ( 'arg must be an array of [ee, events...] arrays' ) } var cleanups = [ ] for ( var i = 0 ; i < stuff . length ; i ++ ) { var arr = stuff [ i ] if ( ! Array . isArray ( arr ) || arr . length < 2 ) { throw new TypeError ( 'each array member must be [ee, events...]' ) } var ee = arr [ 0 ] for ( var j = 1 ; j < arr . length ; j ++ ) { var event = arr [ j ] var fn = listener ( event , callback ) // listen to the event ee . on ( event , fn ) // push this listener to the list of cleanups cleanups . push ( { ee : ee , event : event , fn : fn } ) } } function callback ( ) { cleanup ( ) done . apply ( null , arguments ) } function cleanup ( ) { var x for ( var i = 0 ; i < cleanups . length ; i ++ ) { x = cleanups [ i ] x . ee . removeListener ( x . event , x . fn ) } } function thunk ( fn ) { done = fn } thunk . cancel = cleanup return thunk }
Get the first event in a set of event emitters and event pairs.

@param {array} stuff
@param {function} done
@public
Get the first event in a set of event emitters and event pairs .