如何获取indexeddb的键以在put函数中使用

时间:2019-05-16 13:52:51

标签: javascript indexeddb

我正在尝试获取要更新的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.

1 个答案:

答案 0 :(得分:0)

所以似乎有两件事可能会给您带来麻烦。

1)与错误Uncaught DOMException有关,该消息的含义是,当您定义对象存储库时,您指定了keyPath的{​​{1}},这意味着您正在使用内联键这家商店。这意味着,当您使用id方法时,不能将键作为该方法的第二个参数传递,但是必须将其放在要尝试.put()的对象中。因此,执行put,然后将ob.id = key传递到ob调用中。

2)您获得put的方式也可能是一个问题。 key请求是一个异步调用,因此.get()解析时将触发一个onsuccess事件。因此,您将需要一个处理程序来将密钥从成功的get中提取出来,并希望在其中实现.get()调用。

我已采用您的代码并对其进行了修改,以反映我提到的两个更改:

.put()