2012-11-13 34 views
0

我试图查看某个条目是否已存在于objectStore中。如果条目存在,我需要改变它的一些领域;如果条目不存在,我需要添加它。在IndexedDB 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)请求找到任何东西(顺便说一句,在“主题”对象存储包含零条目时,我这样做...)。 我想我会使用onsuccessonerror函数来判断是否需要更新现有记录或创建新记录。我究竟做错了什么?

+1

的可能重复(http://stackoverflow.com/questions/14447030/why-does-indexeddb-objectstore-get-call-on-access-even-the-the-objectstore-does) – Josh

回答

5
horse's mouth

直接:

IDBObjectStore.get()产生相同的结果如果与给定值的记录并不时记录存在的存在,但未定义的值。如果需要分开说明两种情况,则可以使用openCursor和相同的密钥。如果记录存在,这将返回一个undefined为值的游标,如果不存在这样的记录,则返回游标。

我想你想要的东西,如:[?为什么是IndexedDB objectStore.get调用的onSuccess即使在对象存储不包含对象]

var cursorRequest = store.openCursor(tHash); 
cursorRequest.onsuccess = function(event) { 
    var cursor = event.result; 
    if (cursor) { 
    // entry exists 
    } else { 
    // entry doesn't exist 
    } 
}  
+0

谢谢你提供一个有用的,完整的回答w/source! – AKA

相关问题