code: function CollectingWorkingQueue(concurrency) {
      var queue = new WorkingQueue(concurrency);
      var result = [];
      var idGen = 0;
  
      function worker(id, job, over) {
          var fun = job.shift();
          job.push(function overWithResult(err, res) {
              result.push([id, err, res]);
              over();
          });
          fun.apply(null, job);
      }
  
      this.onceDone = function onceDone(fun) {
          queue.onceDone(function onceDoneWorker() {
              fun(result);
          });
      };
  
      this.whenDone = util.deprecate(this.onceDone, "capisce.CollectingWorkingQueue.whenDone is deprecated, use onceDone instead.");
  
      this.perform = function perform(/*...*/) {
          var job = Array.prototype.slice.call(arguments, 0);
          var id = idGen++;
          queue.perform(worker, id, job);
          return this;
      };
  
      this.hold = function hold() {
          queue.hold();
      };
  
      this.go = function go() {
          queue.go();
      };
  
      this.doneAddingJobs = function doneAddingJobs() {
          queue.doneAddingJobs();
      };
  }
docs: Wraps a WorkingQueue to collect results from job Use onceDone(fun) to have fun(result) called at the end of all jobs. result is a list of [id, err, value], and you can choose to sort it to get the result in the order the job, were added.