IDBIndex: getKey() 方法

Baseline 已广泛支持

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

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

IDBIndex 接口的 getKey() 方法返回一个 IDBRequest 对象,并在单独的线程中,查找与此索引中给定键对应的、或者如果 key 设置为 IDBKeyRange 时的第一个匹配的主键。

如果找到主键,它将设置为请求对象的 result。请注意,这不会像 IDBIndex.get 那样返回整个记录。

语法

js
getKey()
getKey(key)

参数

key 可选

用于标识要检索的记录的键或 IDBKeyRange。如果此值为 null 或缺失,浏览器将使用无界键范围。

返回值

一个 IDBRequest 对象,后续与此操作相关的事件会在此对象上触发。

如果操作成功,请求的 result 属性的值是与给定键或键范围匹配的第一个记录的键。

异常

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

TransactionInactiveError DOMException

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

DataError DOMException

如果提供的键或键范围包含无效键,则会抛出此异常。

InvalidStateError DOMException

如果 IDBIndex 已被删除或移除,则会抛出此异常。

示例

在以下示例中,我们打开了一个事务和一个对象存储,然后从一个简单的联系人数据库中获取了索引 lName。然后,我们使用 IDBIndex.openCursor 在该索引上打开了一个基本游标——这与直接在 ObjectStore 上使用 IDBObjectStore.openCursor 打开游标的工作方式相同,但返回的记录是根据索引排序的,而不是主键。

然后使用 myIndex.getKey('Bungle') 来检索 lNameBungle 的记录的主键,并在成功回调返回时将该请求的结果记录到控制台。

最后,我们遍历每条记录,并将数据插入 HTML 表中。有关完整的可运行示例,请参阅我们的 IndexedDB-examples demo 仓库在线查看示例)。

js
function displayDataByIndex() {
  tableEntry.textContent = "";
  const transaction = db.transaction(["contactsList"], "readonly");
  const objectStore = transaction.objectStore("contactsList");

  const myIndex = objectStore.index("lName");
  const getKeyRequest = myIndex.getKey("Bungle");
  getKeyRequest.onsuccess = () => {
    console.log(getKeyRequest.result);
  };

  myIndex.openCursor().onsuccess = (event) => {
    const cursor = event.target.result;
    if (cursor) {
      const tableRow = document.createElement("tr");
      for (const cell of [
        cursor.value.id,
        cursor.value.lName,
        cursor.value.fName,
        cursor.value.jTitle,
        cursor.value.company,
        cursor.value.eMail,
        cursor.value.phone,
        cursor.value.age,
      ]) {
        const tableCell = document.createElement("td");
        tableCell.textContent = cell;
        tableRow.appendChild(tableCell);
      }
      tableEntry.appendChild(tableRow);

      cursor.continue();
    } else {
      console.log("Entries all displayed.");
    }
  };
}

规范

规范
Indexed Database API 3.0
# ref-for-dom-idbindex-getkey①

浏览器兼容性

另见