code: function pool(promiseFactories, limit) {
    return new Promise(function (resolve, reject) {
      var running = 0;
      var current = 0;
      var done = 0;
      var len = promiseFactories.length;
      var err;
  
      function runNext() {
        running++;
        promiseFactories[current++]().then(onSuccess, onError);
      }
  
      function doNext() {
        if (++done === len) {
          /* istanbul ignore if */
          if (err) {
            reject(err);
          } else {
            resolve();
          }
        } else {
          runNextBatch();
        }
      }
  
      function onSuccess() {
        running--;
        doNext();
      }
  
      /* istanbul ignore next */
      function onError(thisErr) {
        running--;
        err = err || thisErr;
        doNext();
      }
  
      function runNextBatch() {
        while (running < limit && current < len) {
          runNext();
        }
      }
  
      runNextBatch();
    });
  }
docs: dead simple promise pool, inspired by https://github.com/timdp/es6-promise-pool but much smaller in code size. limits the number of concurrent promises that are executed