code: function slowLoop(items, loopBody) {
  	return new Promise(f => {
  		let done = arguments[2] || f;
  		let idx = arguments[3] || 0;
  		let cb = items[idx + 1] ? () => slowLoop(items, loopBody, done, idx + 1) : done;
  		loopBody(items[idx], idx, cb);
  	});
  }
docs: Execute the loopBody function once for each item in the items array,
  waiting for the done function (which is passed into the loopBody function)
  to be called before proceeding to the next item in the array.
  @param {Array} items - The array of items to iterate through
  @param {Function} loopBody - A function to execute on each item in the array.
  This function is passed 3 arguments -
  1. The item in the current iteration,
  2. The index of the item in the array,
  3. A function to be called when the iteration may continue.
  @returns {Promise} - A promise that is resolved when all the items in the
  in the array have been iterated through.