IDBCursor: advance() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

注意:此功能在 Web Workers 中可用。

advance() 方法是 IDBCursor 接口的一部分,用于设置游标应该向前移动的次数。

语法

js
advance(count)

参数

计数

向前移动游标的次数。

返回值

无(undefined)。

异常

此方法可能会抛出以下类型之一的DOMException

TransactionInactiveError DOMException

如果此 IDBCursor 的事务处于非活动状态,则抛出此异常。

TypeError

如果传递给 count 参数的值为零或负数,则会抛出此错误。

InvalidStateError DOMException

如果光标当前正在迭代或已迭代到末尾,则抛出此异常。

示例

在这个简单的代码片段中,我们创建了一个事务,检索了一个对象存储,然后使用游标迭代对象存储中的记录。在这里,我们使用 cursor.advance(2) 每次跳过 2 个位置,这意味着只有一半的结果会被显示。advance() 的工作方式与 IDBCursor.continue 类似,不同之处在于它允许您一次跳过多个记录,而不仅仅是总是移到下一个记录。

请注意,在循环的每次迭代中,您都可以使用 cursor.value.foo 从游标对象下的当前记录中获取数据。完整的可运行示例,请参阅我们的 IDBCursor 示例 (实时查看示例)。

js
function advanceResult() {
  list.textContent = "";
  const transaction = db.transaction(["rushAlbumList"], "readonly");
  const objectStore = transaction.objectStore("rushAlbumList");

  objectStore.openCursor().onsuccess = (event) => {
    const cursor = event.target.result;
    if (cursor) {
      const listItem = document.createElement("li");
      listItem.textContent = `${cursor.value.albumTitle}, ${cursor.value.year}`;
      list.appendChild(listItem);
      cursor.advance(2);
    } else {
      console.log("Every other entry displayed.");
    }
  };
}

规范

规范
Indexed Database API 3.0
# ref-for-dom-idbcursor-advance①

浏览器兼容性

另见