IndexedDB使用密钥获取所有数据

时间:2017-12-21 19:29:57

标签: javascript asynchronous indexeddb

使用IndexedDB API,我们有以下两种方法:getAll()getAllKeys(),下面是一个用法示例:

let transaction = this.db.transaction(["table"]);
let object_store = transaction.objectStore("table");
request = object_store.getAll(); /* or getAllKeys() */

request.onerror = (event) => {
    console.err("error fetching data");
};
request.onsuccess = (event) => {
    console.log(request.result);
};

问题是getAll()似乎只检索数组格式的数据,getAllKeys()获取没有数据的所有密钥。我找不到获取键和值的方法。

  1. 是否有更好的方法可以通过一次调用获取数据,就像存储一样?

  2. 如果没有,有没有更好的方法可以做到这一点而不会让代码太混乱而发生多个异步调用?

1 个答案:

答案 0 :(得分:8)

我能够使用IDBCursor使用一个回调函数检索所有带有键的值,如下所示:

transaction = this.db.transaction(["table"]);
object_store = transaction.objectStore("table");
request = object_store.openCursor();

request.onerror = function(event) {
   console.err("error fetching data");
};
request.onsuccess = function(event) {
   let cursor = event.target.result;
   if (cursor) {
       let key = cursor.primaryKey;
       let value = cursor.value;
       console.log(key, value);
       cursor.continue();
   }
   else {
       // no more results
   }
};