데이터를로드하고 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++]});
}
}
감사합니다. 나는 미래에 깨끗한 Promise 또는 rxjs를 사용할 계획이었습니다. Promise보다 편안한 catch 오류. 하지만 오류없이 코드를 만들고 싶습니다. 또한이 예제에서는 매번 새로운 indxedDBbut 연결을 열지 만 하나만 사용합니다. 동시성 패턴과 같은 것을 사용해야한다고 생각합니다 : 생산자와 소비자 – Greg