加载数据并将其存储在indexeddb数据库中.我经常有数据库崩溃并失去对它的访问权限.
请给我一个如何异步使用indexeddb的解决方案!
请给我一个如何异步使用indexeddb的解决方案!
我现在使用的示例代码:
var dataTotal = 0; var threads = 6; //openIndexeddbConnection(); function start(total){ dataTotal = total; for (var i = 0; i < threads; i++) { loadData(i); } } function loadData(datanum){ var datanext = datanum + threads; if(datanext > dataTotal){ //checkEnd(); return; } $.ajax({ url: baseUrl,data: {offset: datanum},success: function (data) { successData(datanext,data); },type: 'GET' }); } function successData(datanext,data){ var dataArray = data.split(';'); saveData(dataArray); loadData(datanext); } function saveData(dataArray){ putItem(); function putItem(i) { var count = i || 0; if(dataArray.length <= i){ return; } var transaction = Indexeddb.transaction([dataTableName],"readwrite"); transaction.onsuccess = function (event) { //continue putItem(count); }; var objectStore = transaction.objectStore(dataTableName); var request = objectStore.add({data: dataArray[count++]}); } }
解决方法
我一直在使用
idb – 一个使用promises包装IndexedDB的简单库.这使得异步DB操作更容易使用.
如果您定位Chrome(或使用支持Chrome的转发器),您可以使用async和await来简化代码:
async function saveData(dataArray) { const db = await idb.open('YourDB',currentVersion,upgradeFunction); const tran = await db.transaction('StoreName','readwrite'); const store = tran.objectStore('StoreName'); // This will add the items sequentially for(let item of dataArray) { await store.add({data:item}); } }