我在IndexedDB中有这段代码:
var request = objectStore.add({ entryType: entryType, entryDate: t});
现在我想知道刚添加的这条记录的关键。我该怎么做?
我找到了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;
};
这对我不起作用 - 键显示为未定义。我想我错过了一些基本的东西!
答案 0 :(得分: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;
};
希望此代码能够检索最后插入的记录的密钥
答案 1 :(得分:4)
spec是为用户代理编写的,而不是为开发人员编写的。所以令人困惑。密钥生成器由用户代理提供。
event
处理程序收到的任何onsuccess
对象始终都有event.target.result
。这是您正在寻找的关键。如果您不提供密钥,则会自动生成密钥,假设您将autoIncrement设置为true。
步骤8中的documented:如下:
- 此算法的结果很关键。
醇>
答案 2 :(得分:0)
这里的诀窍是知道如何迭代地搜索短语,直到找到你需要的东西。我之前从未听说过IndexedDB,但似乎找到了你想要的东西。
我放"IndexedDB" into a search engine并找到了this。这产生了短语“密钥生成器”,因此我searched for that as well导致我this和this。
StackOverflow链接讨论了使用UUID,这当然可以用JavaScript生成,最后一个链接似乎有一些示例可以开箱即用。
答案 3 :(得分:0)
如果您为 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}`);
当然要记住,这只有在传递给 autoIncrement: true
的选项中包含 createObjectStore()
时才有效。