Я использую javascript для этого. Я хочу добавить данные в базу данных (indexedDB). Данные будут поступать из веб-сервиса как json, и я перебираю их и добавляю в хранилище объектов с помощью keyPath.
Когда я смотрю на данные из веб-сервиса, у меня есть массив из 186 объектов, но когда я читаю данные из indexedDB, у меня есть 151. Когда я пошел, чтобы проверить базу данных, чтобы увидеть, были ли данные там , это не было ... Так что что-то должно происходить с моей функцией добавления.
Вот мой код:
Открытие базы данных с помощью objectStore:
let db;
let request = window.indexedDB.open("WHS", 4);
request.onerror = function(event) {
console.log(event.target.errorCode);
};
request.onsuccess = function(event) {
db = event.target.result;
};
request.onupgradeneeded = function(event) {
let db = event.target.result;
let palletStore = db.createObjectStore("pallets", { keyPath: "palletno" });
};
Добавление данных после передачи их в мою функцию:
function addPalletsToIDB(pallets) {
let transaction = db.transaction(["pallets"], "readwrite");
let objectStore = transaction.objectStore("pallets");
$.each(pallets, function(i, pallet) {
let request = objectStore.put(pallet);
})
request.onsuccess = function(event) {
console.log('Added pallets : ', event.target.response);
};
transaction.oncomplete = function() {
getPalletDataFromIDB();
}
};
Чтение данных:
function getPalletDataFromIDB() {
palletsFromIDB = [];
let transaction = db.transaction(["pallets"], IDBTransaction.READ);
transaction.oncomplete = function(event) {
console.log(event);
};
transaction.onerror = function(event) {
console.log(event.type);
};
let objectStore = transaction.objectStore("pallets");
objectStore.openCursor().onsuccess = function(event) {
let cursor = event.target.result;
if (cursor) {
palletsFromIDB.push(cursor.value);
cursor.continue();
}
transaction.oncomplete = function() {
console.log("[palletsFromIDB] ", palletsFromIDB);
toastr.info("Got pallets");
};
};
};
из веб-службы: {pallets: Array (186)} из indexedDB: [palletsFromIDB ] (151)