code: function emitError(pw, err, async, args, end, ignores) {
      if (err && (!ignores || !err.code || !!~ignores.indexOf(err.code))) {
          var m = (typeof async === 'string' && !/^[^a]{0,}sync/i.test(async)) || async ? pw.emitAsync : pw.emit;
          if (args) {
              var ea = [pw.options.errorEvent, err];
              ea.push.apply(ea, args);
              m.apply(pw, ea);
              if (end) m.apply(pw, ea);
          } else {
              m.call(pw, pw.options.errorEvent, err);
              if (end) m.call(pw, pw.options.endEvent, err);
          }
          return err;
      }
  }
docs: Handles errors by emitting the corresponding event(s)
  
  @private
  @emits the error event set in the pulse emitter's options passing in the {Error} in error listeners
  @arg {PulseEmitter} pw the pulse emitter
  @arg {Error} err the error to emit
  @arg {*} [async] truthy for determining emission type (strings that end with *sync*, but not *async* will emit synchronously)
  @arg {*[]} [args] additional arguments to pass into the emission (first argument will always be the error)
  @arg {Boolean} [end] true to emit the end event set in the pulse emitter's options after error emission
  @arg {*[]} [ignores] array of error.code that will be ignored
  @returns {Error} the error when emission has occurred or undefined when it has not