IDBObjectStore: put() 方法
注意:此功能在 Web Workers 中可用。
put() 方法是 IDBObjectStore 接口的一个方法,用于更新数据库中指定记录,或者在指定的项不存在时插入一条新记录。
它会返回一个 IDBRequest 对象,并在单独的线程中创建一个结构化克隆(structured clone)的 value,然后将其存储到对象存储中。这用于在事务模式为 readwrite 时添加新记录或更新现有记录。如果记录存储成功,则在返回的请求对象上会触发一个 success 事件,其 result 属性设置为存储记录的键,transaction 属性设置为打开此对象存储的事务。
put 方法是更新或插入方法。有关仅插入的方法,请参阅 IDBObjectStore.add 方法。
请注意,如果您要更新的记录拥有一个 IDBCursor,那么使用 IDBCursor.update() 来更新它比使用 IDBObjectStore.put() 更可取。这样做可以清楚地表明要更新的是现有记录,而不是插入新记录。
语法
put(item)
put(item, key)
参数
item-
您希望更新(或插入)的项。
key可选-
您想更新的记录的主键(例如,来自
IDBCursor.primaryKey)。
返回值
一个 IDBRequest 对象,后续与此操作相关的事件会在此对象上触发。
如果操作成功,请求的 result 属性的值将是新记录或更新记录的键。
异常
此方法可能会抛出以下类型之一的DOMException:
ReadOnlyErrorDOMException-
如果与此操作关联的事务处于只读 模式,则会抛出此异常。
TransactionInactiveErrorDOMException-
如果此
IDBObjectStore的事务不活跃,则会抛出此异常。 DataErrorDOMException-
如果满足以下任一条件,则会抛出此异常:
InvalidStateErrorDOMException-
如果
IDBObjectStore已被删除或移除,则会抛出此异常。 DataCloneErrorDOMException-
如果正在存储的数据无法通过内部结构化克隆算法进行克隆,则会抛出此异常。
示例
以下示例请求一个给定的记录标题;当该请求成功时,onsuccess 函数会从 IDBObjectStore(通过 objectStoreTitleRequest.result 可获得)获取关联的记录,更新记录的一个属性,然后使用 put() 方法将更新后的记录放回对象存储。有关完整的可工作示例,请参阅我们的 To-do Notifications 应用(在线查看示例)。
const title = "Walk dog";
// Open up a transaction as usual
const objectStore = db
.transaction(["toDoList"], "readwrite")
.objectStore("toDoList");
// Get the to-do list object that has this title as its title
const objectStoreTitleRequest = objectStore.get(title);
objectStoreTitleRequest.onsuccess = () => {
// Grab the data object returned as the result
const data = objectStoreTitleRequest.result;
// Update the notified value in the object to "yes"
data.notified = "yes";
// Create another request that inserts the item back into the database
const updateTitleRequest = objectStore.put(data);
// Log the transaction that originated this request
console.log(
`The transaction that originated this request is ${updateTitleRequest.transaction}`,
);
// When this new request succeeds, run the displayData() function again to update the display
updateTitleRequest.onsuccess = () => {
displayData();
};
};
规范
| 规范 |
|---|
| Indexed Database API 3.0 # ref-for-dom-idbobjectstore-put① |
浏览器兼容性
加载中…
另见
- 使用 IndexedDB
- 开始事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置键的范围:
IDBKeyRange - 检索和修改数据:
IDBObjectStore - 使用游标:
IDBCursor - 参考示例:待办事项通知(查看实时示例)。