Tải dữ liệu và lưu trữ chúng trong cơ sở dữ liệu chỉ mục. Định kỳ tôi có sự cố cơ sở dữ liệu và mất quyền truy cập vào nó. Hãy cho tôi một giải pháp về cách sử dụng indexeddb một cách không đồng bộ!Làm thế nào để làm việc với IndexedDB không đồng bộ?
Mẫu mã mà tôi đang sử dụng hiện nay:
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++]});
}
}
Cảm ơn cho câu trả lời. Tôi đã lên kế hoạch trong tương lai để sử dụng Promise sạch, hoặc rxjs. Với lời hứa bắt lỗi thoải mái hơn. Nhưng tôi muốn tạo mã mà không có bất kỳ lỗi nào. Ngoài ra, trong ví dụ bạn mở mỗi lần kết nối indxedDBbut mới, nhưng tôi chỉ sử dụng một kết nối. Tôi nghĩ rằng chúng ta nên sử dụng một cái gì đó như Concurrency Pattern: Nhà sản xuất và người tiêu dùng – Greg