在IndexedDB中搜索不存在的密钥objectStore仍然会返回成功

AKA*_*AKA 0 google-chrome 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);
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是findRequest.onsuccess函数总是触发 - 即使get(tHash)请求不可能找到任何东西(顺便说一下,"topic"对象存储在我这样做时包含零条目......).我想我会使用onsuccessonerror函数来判断我是否需要更新现有记录或创建新记录.我究竟做错了什么?

Nik*_*ann 5

直接从马的嘴里:

IDBObjectStore.get()如果具有给定键的记录不存在,如记录存在,但未定义为值,则会产生相同的结果.如果您需要区分两种情况,可以使用openCursor相同的密钥.如果存在记录,这将返回未定义为值的游标,如果不存在此类记录,则返回无游标.

我想你想要的东西:

var cursorRequest = store.openCursor(tHash);
cursorRequest.onsuccess = function(event) {
  var cursor = event.result;
  if (cursor) {
    // entry exists
  } else {
    // entry doesn't exist
  }
}    
Run Code Online (Sandbox Code Playgroud)