是否可以在不克隆、删除或添加新条目的情况下更新IndexedDB索引中的对象值?理论上,类似以下代码段的代码段可以做到这一点,尽管在put
得到确认之前,它可能不会delete
。但在我看来,这似乎有点矫枉过正。在它上面进行任何错误处理都将是一场噩梦。
const objectStore = db.transaction([objectStoreName], 'readwrite')
.objectStore(objectStoreName);
const requestGet = objectStore.get(index);
requestGet.onsuccess = (event: any) => {
const value = event.target.result.value // Store old value
const requestDelete = objectStore.delete(index);
requestDelete.onsuccess = (event: any) => {
const requestPut = objectStore
.put({index: 'New Index Value', value: value}); // Put back using new index
};
};
2条答案
按热度按时间syqv5f0l1#
您无法直接变更对象存放区索引中的值。您可以变更对象存放区中对象的值,IndexedDB会将您的变更传播到相关索引。索引基本上是只读的。
6rqinv9w2#
这是可能的,因为您指定了索引,否则可能需要其他逻辑。
正如你应该知道的,IDBObjectStore有一个方法**.put()**,它将接收两个参数。使用它你可以放置一个新值或更新一个值。
放置(项,键)项:您要放置/更新的项关键字:可选:您要更新的项目的主要对象存储密钥(如uuid、随机数,简称...)。
编码:
您可以在MDN IDBObjectStore.put文档中查看所需的更多详细信息。IDBObjectStore