IDBIndex: get() 方法
注意:此功能在 Web Workers 中可用。
IDBIndex 接口的 get() 方法返回一个 IDBRequest 对象,并在一个单独的线程中,查找被引用的对象存储中与给定键相对应的对象,或者如果 key 被设置为 IDBKeyRange,则查找第一个匹配的对象。
如果找到对象,则会创建一个该对象的结构化克隆,并将其设置为请求对象的 result 属性:这将返回与键关联的记录。
语法
get()
get(key)
参数
key可选-
用于标识要检索的记录的键或
IDBKeyRange。如果此值为空或缺失,浏览器将使用无边界键范围。
返回值
一个 IDBRequest 对象,后续与此操作相关的事件会在此对象上触发。
如果操作成功,请求的 result 属性的值将是与给定键或键范围匹配的第一条记录的值。
异常
此方法可能会抛出以下类型之一的DOMException:
TransactionInactiveErrorDOMException-
如果此
IDBIndex的事务处于非活动状态,则会抛出此异常。 DataErrorDOMException-
如果提供的键或键范围包含无效键,则会抛出此异常。
InvalidStateErrorDOMException-
如果
IDBIndex已被删除或移除,则会抛出此异常。
示例
在以下示例中,我们打开了一个事务和一个对象存储,然后从一个简单的联系人数据库中获取了索引 lName。然后,我们使用 IDBIndex.openCursor 在该索引上打开了一个基本游标——这与直接在 ObjectStore 上使用 IDBObjectStore.openCursor 打开游标的工作方式相同,但返回的记录是根据索引排序的,而不是主键。
然后使用 myIndex.get('Bungle') 来检索 lName 为 Bungle 的记录,并在成功回调返回时将其结果记录到控制台。
最后,我们遍历每条记录,并将数据插入 HTML 表中。有关完整的可运行示例,请参阅我们的 IndexedDB-examples demo 仓库(在线查看示例)。
function displayDataByIndex() {
tableEntry.textContent = "";
const transaction = db.transaction(["contactsList"], "readonly");
const objectStore = transaction.objectStore("contactsList");
const myIndex = objectStore.index("lName");
const getRequest = myIndex.get("Bungle");
getRequest.onsuccess = () => {
console.log(getRequest.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-get① |
浏览器兼容性
加载中…
另见
- 使用 IndexedDB
- 开始事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置键的范围:
IDBKeyRange - 检索和修改数据:
IDBObjectStore - 使用游标:
IDBCursor - 参考示例:待办事项通知(查看实时示例)。