2016-10-24 6 views
0

Здравствуйте, я хочу создать локальную базу данных для моего телефонного разговора, чтобы пользователь мог использовать его в автономном режиме.Как хранить массив mongodb коллекций внутри indexedDB

У меня есть это в угловой функции, которая создает базу данных.

function Database() { 

    return { 
     create: function (itemDocs) { 

      var db = null; 

      var request = indexedDB.open("myDB", 1); 

      request.onsuccess = function (event) { 
       db = event.target.result; 
       console.log("DB loaded successfully"); 

      }; 

      request.onerror = function (event) { 
       console.log(event) 
      }; 

      request.onupgradeneeded = function (event) { 
       db = event.target.result; 
       console.log("DB initiliazed/created"); 

       //create collections 
       db.createObjectStore("items", {keyPath: "_id"}); 

       //create documents 
       var transaction = db.transaction(["items"], "readwrite"); 

       var items = transaction.objectStore("items"); 

       items.add(itemDocs); 

      }; 


     } 
    } 

} 

В itemDocs содержит коллекцию MongoDB (который представляет собой массив объектов), и я хочу, чтобы хранить эту коллекцию в базе данных IndexedDB проблемы им с в том, что я получаю эту досадную ошибку.

Uncaught InvalidStateError: Failed to execute 'transaction' on 'IDBDatabase': A version change transaction is running. 

ответ

1

Использование var transaction = event.target.transaction вместо var transaction = db.transaction(...);

Полный ответ довольно длительным. Вкратце, вы не хотите создавать новую транзакцию в onupgradeneeded. Для вас уже имеется активная транзакция.