我正在尝试获取要更新的indexedDb中特定记录的密钥。我到处搜索,包括IDB自己的文档,但还没有找到我想要的东西。
这是我的数据库-> IndexedDB records
我在下面的代码中尝试做的是获取keyPath'id'值,该值用于获取要通过put函数更新的指定记录。
//Save page when choosen
var cv = document.getElementById('myCanvas');
let bits = cv.toDataURL("image/png");
let ob = {
created: new Date(),
data: bits
};
let trans = db.transaction([currentNotebook], 'readwrite');
let key = trans.objectStore(currentNotebook).get(getAllKeysRequest.result[currentPage]);
let editReq = trans.objectStore(currentNotebook).put(ob, key);
editReq.onerror = function (e) {
console.log('error storing data');
console.error(e);
}
运行上述代码时发生错误
<font cUncaught DOMException: Failed to execute 'put' on 'IDBObjectStore': The object store uses in-line keys and the key parameter was provided.
答案 0 :(得分:0)
所以似乎有两件事可能会给您带来麻烦。
1)与错误Uncaught DOMException
有关,该消息的含义是,当您定义对象存储库时,您指定了keyPath
的{{1}},这意味着您正在使用内联键这家商店。这意味着,当您使用id
方法时,不能将键作为该方法的第二个参数传递,但是必须将其放在要尝试.put()
的对象中。因此,执行put
,然后将ob.id = key
传递到ob
调用中。
2)您获得put
的方式也可能是一个问题。 key
请求是一个异步调用,因此.get()
解析时将触发一个onsuccess
事件。因此,您将需要一个处理程序来将密钥从成功的get中提取出来,并希望在其中实现.get()
调用。
我已采用您的代码并对其进行了修改,以反映我提到的两个更改:
.put()