code: function step (err, val) {
      if (iter) {
        // generator step
        yielded = false
        isYieldable = false
        var state
        if (trycatch) {
          try {
            if (nothrow) state = iter.next(slice.call(arguments))
            else state = err ? iter.throw(err) : iter.next(val)
          } catch (err) {
            iter = null // catch err, break iteration
            return step(err)
          }
        } else {
          if (nothrow) state = iter.next(slice.call(arguments))
          else state = err ? iter.throw(err) : iter.next(val)
        }
        if (state && state.done) iter = null
        yielded = true
        isYieldable = yieldable.call(self, state.value, step, opts)
        if (!isYieldable && opts.yieldable) {
          isYieldable = opts.yieldable.call(self, state.value, step)
        }
        // next if generator returned non-yieldable
        if (!isYieldable && !iter) next(null, state.value)
      } else if (callback) {
        callback.apply(self, arguments)
        callback = null
      }
    }
docs: internal callback stepper
  
  @param {object} err - callback error object
  @param {...*} val - callback value(s)