Как работать с indexeddb асинхронно?

275
12 января 2017, 06:57

Загружаю данные и сохраняю их в indexeddb базе данных. Периодически у меня база данных зависает и к ней пропадает доступ. Вполне возможно, что это из-за того что к ней происходит несколько одновременных обращений. Подскажите, существует ли такая проблема. И если да, то какие могут быть решения.

Примерный код того, что я сейчас делаю.

var dataTotal = 0;
var threads = 6;
function start(total){
//openIndexeddbConnection();
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){
  var transaction = Indexeddb.transaction([dataTableName], "readwrite");
  var objectStore = transaction.objectStore(dataTableName);

  putItem();
  function putItem(i) {
    var count = i || 0;
    if(dataArray.length >= i){
      return;
    }
    var request = objectStore.add({data: dataArray[count++]});
    request.onsuccess = function (event) {
      //continue
      putItem(count);
    };
  }
}
READ ALSO
Es6 TypeScript arguments

Es6 TypeScript arguments

Решил побаловаться TypeScript и es6, а в частности Proxy

286
Один post обработчик для нескольких форм. Jquery

Один post обработчик для нескольких форм. Jquery

Здравствуйте, подскажите как приучить код к нескольким формам на странице

386
Как вывести в инпут сегодняшнюю дату при загрузке страницы [требует правки]

Как вывести в инпут сегодняшнюю дату при загрузке страницы [требует правки]

Использую календарь Air Datepicker с форматированием input type="text" data-date-format="с dd M" value="" class=""

256