IDBIndex: getKey() 方法
注意: 此功能在 Web Workers 中可用。
getKey()
方法是 IDBIndex
接口的方法,它返回一个 IDBRequest
对象,并在另一个线程中查找与该索引中的给定键相对应的主键,或者如果 key
设置为一个 IDBKeyRange
,则查找第一个对应的主键。
如果找到主键,它将被设置为请求对象的 result
。请注意,这不会像 IDBIndex.get
那样返回整个记录。
语法
getKey()
getKey(key)
参数
key
可选-
用于标识要检索的记录的键或
IDBKeyRange
。如果此值为空或缺失,浏览器将使用无界键范围。
返回值
一个 IDBRequest
对象,后续与该操作相关的事件将在该对象上触发。
如果操作成功,请求的 result
属性的值是与给定键或键范围匹配的第一个记录的键。
异常
此方法可能会引发以下类型的 DOMException
TransactionInactiveError
DOMException
-
如果此
IDBIndex
的事务处于非活动状态,则抛出此异常。 DataError
DOMException
-
如果提供的键或键范围包含无效键,则抛出此异常。
InvalidStateError
DOMException
-
如果
IDBIndex
已被删除或移除,则抛出此异常。
示例
在以下示例中,我们打开一个事务和一个对象存储,然后从简单的联系人数据库中获取索引 lName
。然后,我们使用 IDBIndex.openCursor
在索引上打开一个基本游标——这与直接使用 IDBObjectStore.openCursor
在 ObjectStore
上打开游标相同,只是返回的记录是根据索引排序的,而不是根据主键排序的。
然后,myIndex.getKey('Bungle')
用于检索 lName
为 Bungle
的记录的主键,并且当其成功回调返回时,该请求的结果将被记录到控制台。
最后,我们遍历每个记录,并将数据插入到 HTML 表格中。有关完整的示例,请参阅我们的 IndexedDB-examples 演示仓库 (查看实时示例)。
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① |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和修改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办通知 (查看实时示例)。