schedule(timeout) {
    this.clear();

    this._eta = Date.now() + timeout;
    this._timeout = timeout;
    this._timeoutDeferred = new Deferred();
    this._timeoutHandle = setTimeout(() => {
      this._timeoutDeferred.resolve();
    }, this._timeout);

    return this;
  }
@param {number} timeout - maximal allowed duration in milliseconds