indexeddb データストアに挿入する必要があるサーバーからの 20 ~ 50k の JSON オブジェクト応答に苦労しています。
応答は foreach で繰り返され、すべての行がそれぞれに追加されます。応答が 10k 行未満の呼び出しは正常に機能し、1 分ほどで挿入されます。しかし、金額が大きくなると、しばらくするとデータベースが応答しなくなり、このエラー メッセージが返されます。
「db エラー エラー = 不明な理由でトランザクションが中止されました」
データベースには Dexie ラッパーを使用し、ngDexie と呼ばれる dexie には角度のあるラッパーを使用しています。
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;
データ全体を 1 つのチャンクで処理する方法が間違っていますか? より良い代替手段はありますか?この手順全体は、ユーザーがサイトを開いたときに 1 回だけ実行されます。すべてのヘルプは大歓迎です。対象端末は Android with Chrome 搭載のタブレットです。