在IndexedDB中同时获取多个表项

时间:2017-10-16 04:10:39

标签: indexeddb

在indexedDB中,我使用多个动态对象库创建一个数据库 从哪里我可以从单个表中获取项目,但是当尝试从所有表中使用循环获取所有数据时,它仅显示最后一个表数据,错误消息objectStore未指定给上一个表。可能有任何简单的解决方案只有我无法得到它由于indexedDB的新功能。 以下是我的功能:

function displayData(store) {

    for(i = 0; i < TotalModule; i++) {
    ModuleCode= $("#MC_"+i).val();
     storeName = 'tableName_'+ModuleCode;
     DbStoreName .push(storeName );
    }
   DbStore = "'" + DbStoreName .join("','") + "'";

   if (typeof DbStore == 'undefined')

     tx = db.transaction(DbStore, 'readwrite');  //['tab1','tab2','tab3']

        $.each(DbStoreName , function(i) {
            STORE_NAME = DbStoreName [i];
            var ob = 'ob'+i;
            ob = tx.objectStore(STORE_NAME);
      });

}

view Image.

1 个答案:

答案 0 :(得分:0)

听起来你正试图在同步for循环中调用异步函数。在使用indexedDB之前,您应该非常熟悉编写异步Javascript。

那就是说,尝试类似下面的伪代码。我选择使用承诺。

function load_store(store) {
  return new Promise(function(resolve, reject) {
    var request = store.getAll();
    request.onsuccess = () => resolve(request.result);
    request.onerror = () => reject(request.error);
  });
}

function load_stores(db, names) {
  var tx = db.transaction(names, 'readonly');
  var stores = names.map((name) => tx.objectStore(name));
  var load_store_promises = stores.map(load_store);
  return Promise.all(load_store_promises);
}

function displayData() {
  var names = ...;
  var db ...;
  load_stores(db, names).then(function(array_of_arrays) {
    console.log('data:', array_of_arrays);
  }).catch(function(error) {
    console.log('loading error', error);
  });
}