code: function getItemCallback(args) {
    if (args.length === 0) {
      return undefined;
    }
    var onItem = args[0];
    if (typeof onItem !== 'function') {
      throw Error('The first argument to autoPagingEach, if present, must be a callback function; receieved ' + typeof onItem);
    }
  
    // 4. `.autoPagingEach((item, next) => { doSomething(item); next(false); });`
    if (onItem.length === 2) {
      return onItem;
    }
  
    if (onItem.length > 2) {
      throw Error('The `onItem` callback function passed to autoPagingEach must accept at most two arguments; got ' + onItem);
    }
  
    // This magically handles all three of these usecases (the latter two being functionally identical):
    // 1. `.autoPagingEach((item) => { doSomething(item); return false; });`
    // 2. `.autoPagingEach(async (item) => { await doSomething(item); return false; });`
    // 3. `.autoPagingEach((item) => doSomething(item).then(() => false));`
    return function _onItem(item, next) {
      var shouldContinue = onItem(item);
      next(shouldContinue);
    };
  }
docs: We allow four forms of the `onItem` callback (the middle two being equivalent),
  
  1. `.autoPagingEach((item) => { doSomething(item); return false; });`
  2. `.autoPagingEach(async (item) => { await doSomething(item); return false; });`
  3. `.autoPagingEach((item) => doSomething(item).then(() => false));`
  4. `.autoPagingEach((item, next) => { doSomething(item); next(false); });`
  
  In addition to standard validation, this helper
  coalesces the former forms into the latter form.