0

我正在尝试查看 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)请求不可能找到任何东西(顺便说一句,当我这样做时,“主题”objectStore 包含零条目......)。我想我会使用onsuccessandonerror函数来判断我是否需要更新现有记录或创建新记录。我究竟做错了什么?

4

1 回答 1

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
  }
}    
于 2012-11-13T22:18:41.200 回答