4

我在 IndexedDB 中有这段代码:

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

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

我找到了这篇文章,以及这段代码:

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;
};

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

4

4 回答 4

7

浏览这段代码

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;
};

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

于 2014-06-12T07:21:11.517 回答
4

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

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

记录在第 8 步:如下:

  1. 该算法的结果是关键。
于 2012-12-29T04:04:48.890 回答
0

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

我将“IndexedDB”放入搜索引擎并找到了这个。这产生了“密钥生成器”这个短语,所以我也搜索了它,这导致我找到了thisthis

StackOverflow 链接讨论了如何使用 UUID,它当然可以在 JavaScript 中生成,最后一个链接似乎有一些示例,可以立即执行您想要的操作。

于 2012-12-29T00:48:56.373 回答
0

如果您使用idbIndexedDB 的 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}`);

当然,请记住,这只有在您包含autoIncrement: true在传递给createObjectStore().

于 2021-04-24T03:32:45.730 回答