lib/async/index.js
function abort (q, err) {
    this.csFactory(function (done) {
      try {
        // for each file, clearTimeout and delete the object
        Object.keys(this.files).forEach(function(file) {
          clearTimeout(this.files[file].timer);
          delete this.files[file];
        }, this);

        // if nothing is waiting, make sure empty is set
        this.qempty = !q.length();

        // set the error
        this._setError(err);
      } catch (e) {
        console.error(e);
      }
      done();
    }.bind(this), L_WAIT)();
  }
function abort (q, err) {
    this.csFactory(function (done) {
      try {
        // for each file, clearTimeout and delete the object
        Object.keys(this.files).forEach(function(file) {
          clearTimeout(this.files[file].timer);
          delete this.files[file];
        }, this);

        // if nothing is waiting, make sure empty is set
        this.qempty = !q.length();

        // set the error
        this._setError(err);
      } catch (e) {
        console.error(e);
      }
      done();
    }.bind(this), L_WAIT)();
  }
Provides a way to abort what this is doing.
Causes conditions so that, if isStarted, the poll interval will exit,
cleanup, and call the listener back.
If not started, the listener does not get called. This relationship
is set in html-snapshots.js: listener == notifier.start

@param {Object} q - The worker queue, expected created by async.queue.
@param {Function} q.length - Gets the worker queue length.
@param {Object} [err] - The error object to set.