在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);
});
}
答案 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);
});
}