code: function DebounceTask(proc, { wait, options }) {
    this.lastTask = undefined;
    this.maxWait = undefined;
    this.timerId = undefined;
    this.lastCallTime = undefined;
    this.lastInvokeTime = 0;
    this.leading = false;
    this.maxing = false;
    this.trailing = true;
    this.wait = +wait || 0;
  
    if (is.object(options)) {
      this.leading = !!options.leading;
      this.maxing = 'maxWait' in options;
      this.maxWait = this.maxing ? Math.max(+options.maxWait || 0, this.wait) : this.maxWait;
      this.trailing = 'trailing' in options ? !!options.trailing : this.trailing;
    }
  
    this.proc = proc;
    this.timerExpired = this.timerExpired.bind(this);
    this.finish = noop;
  }
docs: An async task executor which aimed only to help with
  delayed (throttle/debounce) command execution.
  Supports to run in "debounce" and "throttle" mode,
  with instant init call or without.
  
  @private