IDBObjectStore: put() 方法
注意: 此功能在 Web Workers 中可用。
put()
方法是 IDBObjectStore
接口的方法,用于更新数据库中的给定记录,如果给定项不存在,则插入新记录。
它返回一个 IDBRequest
对象,并在另一个线程中创建该值的 结构化克隆,并将克隆的值存储在对象存储中。这是在事务模式为 readwrite
时,用于添加新记录或更新对象存储中的现有记录。如果记录成功存储,则在返回的请求对象上触发成功事件,并将 result
设置为存储记录的键,并将 transaction
设置为打开此对象存储的事务。
put 方法是一个更新或插入方法。请参阅 IDBObjectStore.add
方法以了解仅插入方法。
请记住,如果您有要更新的记录的 IDBCursor
,最好使用 IDBCursor.update()
来更新它,而不是使用 IDBObjectStore.put()
。这样做可以明确地表明将要更新现有记录,而不是插入新记录。
语法
put(item)
put(item, key)
参数
item
-
要更新(或插入)的项。
key
可选-
要更新的记录的主键(例如,来自
IDBCursor.primaryKey
)。
返回值
一个 IDBRequest
对象,后续与此操作相关的事件将在此对象上触发。
如果操作成功,请求的 result
属性的值是新记录或更新记录的键。
异常
此方法可能会引发以下类型之一的 DOMException
ReadOnlyError
DOMException
-
如果与此操作关联的事务处于只读 模式,则抛出此异常。
TransactionInactiveError
DOMException
-
如果此
IDBObjectStore
的事务处于非活动状态,则抛出此异常。 DataError
DOMException
-
如果以下任一条件适用,则抛出此异常
InvalidStateError
DOMException
-
如果
IDBObjectStore
已被删除或移除,则抛出此异常。 DataCloneError
DOMException
-
如果要存储的数据无法通过内部结构化克隆算法克隆,则抛出此异常。
示例
以下示例请求给定记录标题;当该请求成功时,onsuccess
函数从 IDBObjectStore
中获取关联的记录(作为 objectStoreTitleRequest.result
提供),更新记录的一个属性,然后使用 put()
将更新后的记录放回对象存储中进行另一个请求。有关完整的示例,请参阅我们的 待办事项通知 应用程序 (查看示例)。
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① |
浏览器兼容性
BCD 表格仅在浏览器中加载
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和更改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办事项通知 (查看示例)。