如何更改 IndexedDB 索引中对象的值?

How do I change an object's value in an IndexedDB index?

是否可以在不克隆、删除或放置新条目的情况下更新 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         
  };
};

您不能直接更改对象存储索引中的值。您可以更改对象存储中对象的值,IndexedDB 会将您的更改传播到相关索引。索引本质上是只读的。