_looper = function(currentIdx, resolve) {

    iteratee.call(self, self[ARRAY_FIELD][currentIdx], function(value) {
      results[currentIdx] = value;
      currentCnt++;
      if (_arrayLength === currentCnt) {
        resolve(results);
      } else {
        nextTick(function() {
          _looper(currentIdx + 1, resolve);
        });
      }
    });
  }
The same as `Array.map` but runs a single async operation at a time.

@name mapSeries
@param {Function} iteratee - An async function to apply to each item in array.
@param {Function} [callback] - A callback which is called when all `iteratee` functions
have finished. Results is an array of the transformed items from holding array.
Invoked with (results);
@return {Promise} a promise, if no calback if passed.