docs: function Listener(func, max_out) {
    this._func = func;
    this._max = max_out || 0;
    this._out = 0;
    this._end = false;
    this._ended = false;
    this._listening = false;
  
    var self = this;
  
    this.on('done', function () {
      self._out = Math.max(self._out - 1, 0);
  
      if (self._end && self._out === 0 && !self._listenning) {
        self.emit('end'); // We are ready to end
      }
  
      self.start();
    });
  
    this.on('end', function () {
      this._ended = true;
    });
  }