我正在尝试查看objectStore中是否已存在条目。如果条目存在,我需要改变它的一些字段;如果该条目不存在,我需要添加它。
这是我的疑问:
var db = html5rocks.indexedDB.db;
var trans = db.transaction(["topics"], "readwrite");
var store = trans.objectStore("topics");
var findRequest = store.get(tHash);
findRequest.onsuccess = function(event){
console.log("logging event");
console.log(event);
var cursor = event.target.result;
}
findRequest.onerror(e){
console.log(e);
}
我遇到的问题是findRequest.onsuccess
函数总是触发 - 即使get(tHash)
请求不可能找到任何东西(顺便说一句,“topic”对象存储包含零条目我这样做......)。
我想我会使用onsuccess
和onerror
函数来判断我是否需要更新现有记录或创建新记录。我做错了什么?
答案 0 :(得分:5)
直接来自horse's mouth:
如果具有给定键的记录不存在,如记录存在但未定义为值,则
IDBObjectStore.get()
会产生相同的结果。如果您需要区分两种情况,可以使用相同密钥的openCursor
。如果存在记录,这将返回未定义为value的游标,如果不存在此类记录,则返回游标。
我想你想要这样的东西:
var cursorRequest = store.openCursor(tHash);
cursorRequest.onsuccess = function(event) {
var cursor = event.result;
if (cursor) {
// entry exists
} else {
// entry doesn't exist
}
}