function runAfter(callback, enqueue, priority) {
    if (this._pulse || enqueue) {
      // pulse propagation is currently running, queue to run after
      this._postrun.push({
        priority: priority || 0,
        callback: callback
      });
    } else {
      // pulse propagation already complete, invoke immediately
      try {
        callback(this);
      } catch (err) {
        this.error(err);
      }
    }
  }
Schedules a callback function to be invoked after the current pulse
propagation completes. If no propagation is currently occurring,
the function is invoked immediately. Callbacks scheduled via runAfter
are invoked immediately upon completion of the current cycle, before
any request queued via runAsync. This method is primarily intended for
internal use. Third-party callers using runAfter to schedule a callback
that invokes {@link run} or {@link runAsync} should not use this method,
but instead use {@link runAsync} with prerun or postrun arguments.
@param {function(Dataflow)} callback - The callback function to run.
  The callback will be invoked with this Dataflow instance as its
  sole argument.
@param {boolean} enqueue - A boolean flag indicating that the
  callback should be queued up to run after the next propagation
  cycle, suppressing immediate invocation when propagation is not
  currently occurring.
@param {number} [priority] - A priority value used to sort registered
  callbacks to determine execution order. This argument is intended
  for internal Vega use only.