function iterate()

in public/dexie.js [4692:4743]


    function iterate(req, filter, fn, resolve, reject, valueMapper) {
      // Apply valueMapper (hook('reading') or mappped class)
      var mappedFn = valueMapper
        ? function (x, c, a) {
            return fn(valueMapper(x), c, a);
          }
        : fn;
      // Wrap fn with PSD and microtick stuff from Promise.
      var wrappedFn = wrap(mappedFn, reject);
      if (!req.onerror) req.onerror = eventRejectHandler(reject);
      if (filter) {
        req.onsuccess = trycatcher(function filter_record() {
          var cursor = req.result;
          if (cursor) {
            var c = function () {
              cursor.continue();
            };
            if (
              filter(
                cursor,
                function (advancer) {
                  c = advancer;
                },
                resolve,
                reject
              )
            )
              wrappedFn(cursor.value, cursor, function (advancer) {
                c = advancer;
              });
            c();
          } else {
            resolve();
          }
        }, reject);
      } else {
        req.onsuccess = trycatcher(function filter_record() {
          var cursor = req.result;
          if (cursor) {
            var c = function () {
              cursor.continue();
            };
            wrappedFn(cursor.value, cursor, function (advancer) {
              c = advancer;
            });
            c();
          } else {
            resolve();
          }
        }, reject);
      }
    }