【问题标题】:Get key of added record in IndexedDB获取 IndexedDB 中添加记录的键
【发布时间】:2012-12-28 10:33:50
【问题描述】:

我在 IndexedDB 中有这段代码:

var request = objectStore.add({ entryType: entryType, entryDate: t});

现在我想知道刚才添加的这条记录的key。我该怎么做?

我找到了this article,而这个 代码:

var data = {"bookName" : "Name", "price" : 100, "rating":"good"};
var request = objectStore.add(data);
request.onsuccess = function(event){
    document.write("Saved with id ", event.result)
    var key = event.result;
};

这对我不起作用 - 键显示为未定义。我想我在这里缺少一些基本的东西!

【问题讨论】:

  • 我应该认为 IndexedDB 有一些文档 - 那里没有这方面的信息吗?
  • 我找不到 - 有什么想法吗?

标签: javascript jquery indexeddb


【解决方案1】:

浏览这段代码

var data = {"bookName" : "Name", "price" : 100, "rating":"good"};
var request = objectStore.add(data);
request.onsuccess = function(event){
    document.write("Saved with id ", event.result)
    var key = event.target.result;
};

希望此代码能够检索最后插入记录的密钥

【讨论】:

    【解决方案2】:

    spec 是为用户代理编写的,而不是为开发人员编写的。所以很混乱。密钥生成器由用户代理提供。

    onsuccess 处理程序接收的任何event 对象始终具有event.target.result。这是您正在寻找的钥匙。假设您将 autoIncrement 设置为 true,则如果您不提供该密钥,则会自动生成该密钥。

    第8步是documented:如下:

    1. 这个算法的结果是关键。

    【讨论】:

      【解决方案3】:

      这里的诀窍是知道如何迭代地使用短语进行搜索,直到找到所需的内容。我以前从未听说过 IndexedDB,但似乎找到了您想要的。

      我输入了"IndexedDB" into a search engine 并找到了this。这产生了“密钥生成器”这个短语,所以我 searched for that as well 引导我到 thisthis

      StackOverflow 链接讨论了使用 UUID,它当然可以在 JavaScript 中生成,最后一个链接似乎有一些示例,可以做你想做的事情。

      【讨论】:

        【解决方案4】:

        如果您为 IndexedDB 使用 idb Promise 包装器,那么新键就是来自 add() 调用的返回值:

        import { openDB } from 'idb';
        
        const db = await openDB(...);
        const tx = db.transaction('mystore', 'readwrite');
        const newId = await tx.store.add({ hello: 'world' });
        await tx.done;
        
        console.log(`Autogenerated unique key for new object is ${newId}`);
        

        当然请记住,只有在传递给 createObjectStore() 的选项中包含 autoIncrement: true 时,这才有效。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多