Я борюсь с количеством 20-50k ответов объекта JSON с сервера, которые я должен вставить в наше хранилище данных indexeddb.
Ответ повторяется с foreach, и каждая отдельная строка добавляется с каждым. Вызовы с ответом менее 10 тыс. строк работают нормально и вставляются в течение минуты или около того. Но когда суммы становятся больше, база данных через некоторое время перестает отвечать на запросы и возвращает это сообщение об ошибке.
"db Error err=транзакция прервана по неизвестной причине"
Я использую оболочку Dexie для базы данных и угловую оболочку для dexie, которая называется ngDexie.
var deferred = $q.defer();
var progress = 0;
// make the call
$http({
method: 'GET',
headers: headers,
url: '/Program.API/api/items/getitems/' + user
}).success(function (response) {
// parse response
var items = angular.fromJson(response);
// loop each item
angular.forEach(items, function (item) {
// insert into db
ngDexie.put('stuff', item).then(function () {
progress++;
$ionicLoading.show({
content: 'Loading',
animation: 'fade-in',
template: 'Inserting items to db: ' + progress
+ '/' + items.length,
showBackdrop: true,
maxWidth: 200,
showDelay: 0
});
if (progress == items.length) {
setTimeout(function () {
$ionicLoading.hide();
}, 500);
deferred.resolve(items);
}
});
});
}).error(function (error) {
$log('something went wrong');
$ionicLoading.hide();
});
return deferred.promise;
У меня неправильный подход к работе со всеми данными в одном фрагменте? Может есть лучшие альтернативы? Вся эта процедура выполняется только один раз, когда пользователь открывает сайт. Вся помощь приветствуется. Целевое устройство — планшеты под управлением Android с Chrome.