javascript - 为什么indexedDB在添加到数据库时会跳过一些数据?
问题描述
我正在使用 javascript 来执行此操作。我想将数据添加到数据库(indexedDB)。数据将作为 json 来自 web 服务,我正在循环通过它并将其添加到带有 keyPath 的 objectStore。
当我查看来自 web 服务的数据时,我有一个包含 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)
解决方案
一种方法是在您的 json 中创建一个唯一的 keyPath,并将其设置为索引数据库中的 keyPath。
推荐阅读
- azure - Azure 负载均衡器运行状况
- python-3.x - python 3中的套接字超时异常
- javascript - 离子:单击谷歌地图标记以使用 NavController 推送页面会导致点击推送页面不起作用
- reactjs - 如何将组件渲染到反应侧边栏主要内容视图
- multithreading - 使用单线程时的 C++11 线程与 OpenMP
- unix - 连接名称中具有共享功能的文件
- python - 使用 Telethon 查找会话 ID 并终止会话
- javascript - 修剪来自标准输入的输入
- performance - 对于不同的程序,x86 和 MIPS 之间的加速比是多少?
- php - 如果 wp 用户已登录,如何将外部 HTML 重定向到 wordpress?