2016-11-12 67 views
0

我查询我的数据库表如下:IDBKeyRange.only()只返回第一个匹配的记录

function getAllRecords(letter) 
{ 
    var trans = db.transaction(["ObservableStates"],"readonly").objectStore("ObservableStates").index('letterIndex'); 
    //get all matching records 
    var request = trans.openCursor(IDBKeyRange.only([letter])); 

    request.onsuccess = function(event) 
    { 
      var cursor = event.target.result; 
      if(cursor) 
      { 
       count+=1; 
       cursor.continue(); 
       console.log(cursor); 
      } 

     } 

     request.onerror = function(event) 
     { 
      console.log('ERROR LOADING DATA FROM TABLE'); 
     } 
     //delete all of the returned records 

}

我有两个记录具有letter价值,但只返回第一个记录。 cursor.continue()在这种情况下似乎不起作用。

任何帮助,将不胜感激。谢谢

回答

0

这应该工作,我不能再现问题。你可能碰到了一个浏览器错误(你正在测试哪个浏览器?),或者你的代码中有一个不正确的假设,我没有在这里捕获。

下面是我在做什么:

var openRequest = indexedDB.open('test'); 
openRequest.onupgradeneeded = function() { 
    var db = openRequest.result; 
    var store = db.createObjectStore('ObservableStates'); 
    store.createIndex('letterIndex', 'p'); 
    store.put({p: ['a']}, 1); 
    store.put({p: ['a']}, 2); 
}; 
openRequest.onsuccess = function() { 
    var db = openRequest.result; 
    var trans = db.transaction('ObservableStates', 'readonly'); 
    var index = trans.objectStore('ObservableStates').index('letterIndex'); 
    var request = index.openCursor(IDBKeyRange.only(['a'])); 
    request.onsuccess = function() { 
    var cursor = request.result; 
    if (cursor) { 
     console.log(cursor.key, cursor.primaryKey); 
     cursor.continue(); 
    } 
    } 
}; 

而且我看到登录:

  • [ “一”] 1
  • [ “一个” 2

您可能还想要做一个count([letter])针对您的索引的请求,以确认它具有与您预期的一样多的记录。

+0

对不起,不跟进这个问题。奇怪的解决方案,但我在onSuccess回调中做了一个断点(这个代码在一个WebWorker.js文件中)。当我删除断点时,一切运行良好。最有可能的原因是因为WebWorker是一个独立的JavaScript文件,暂停时不更新,而主脚本仍在运行。谢谢 – Techs