【发布时间】:2020-08-31 11:25:24
【问题描述】:
我正在开发一个 WebExtension 并使用 IndexedDB 来存储对象。当我存储一个新对象时,它不会是唯一的。因此,我使用自动递增的 id 使其独一无二。在第一次添加之后,我将做一些工作,修改/更新一些属性,因此必须更新数据库中的对象。但是要更新一个对象,我需要知道它的 ID,目前我还不知道。
这是我将对象添加到数据库的代码:
const dbName = "MyDb";
const dbVersion = 1;
const storeName = "MyStore";
function addObject(obj) {
const request = window.indexedDB.open(dbName, dbVersion);
request.onupgradeneeded = event => {
const db = event.target.result;
const objectStore = db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true });
}
request.onsuccess = event => {
const db = event.target.result;
const transaction = db.transaction(storeName, 'readwrite');
const objectStore = transaction.objectStore(storeName);
objectStore.add(obj);
transaction.onerror = event => {
console.error('Error while adding an object: ', event.target.error.message);
};
// How do I get/return the ID of the previously added object?
transaction.onsuccess = event => {
console.log(event.target.result);
};
transaction.oncomplete = event => {
console.log(event.target.result);
};
}
}
addObject({prop1: "foo", prop2: "bar", prop3: "", prop4: ""});
类似问题的答案-here和here-添加成功后建议查询event.target.result,但在上面的代码中返回undefined,虽然对象已经插入成功。
那么,有没有办法获取刚刚添加的对象的ID呢?
【问题讨论】:
-
与请求相关的成功事件,而不是事务。有区别。
-
如果将
console.log(event.target.result);更改为console.log(event);会怎样?这些事件的内容是什么? -
@Josh Thx,就是这样!
标签: javascript indexeddb