processTaskQueue (start) {
    if (this.taskQueue.length && !config.blocking) {
      const elapsedTime = performance.now() - start;

      if (!setTimeout || config.updateRate <= 0 || elapsedTime < config.updateRate) {
        const task = this.taskQueue.shift();
        Promise.resolve(task()).then(() => {
          if (!this.taskQueue.length) {
            this.advance();
          } else {
            this.processTaskQueue(start);
          }
        });
      } else {
        setTimeout(() => {
          this.advance();
        });
      }
    }
  }
Process the first task on the taskQueue as a promise.
Each task is a function added by Test#queue() in test.js