indexedDB 前端实现缓存自写 自用

63 阅读1分钟
// indexedDB
		var dbName = "pdcaIndexDB" + pdcaID,
			version = 1,
			storeName = "pdcaStore" + pdcaID,
			objectStore,setIntervalID,
			getDataReq;

		var indexedDB = window.indexedDB;
		var db;
		function createDB() {
			return new Promise((resolve, reject) => {
				const request = indexedDB.open(dbName, version); // 打开 创建数据库
				request.onsuccess = function (event) {
					db = event.target.result; // 数据库对象
					db.onversionchange = function (event) {
						event.target.close();    //  删除数据库 必须要加上这个
					}
					resolve(db)
					console.log("数据库打开成功", event.target.result);
				};

				request.onerror = function (event) {
					reject("数据库打开报错")
					console.log("数据库打开报错");
				};

				request.onupgradeneeded = function (event) {
					// 数据库创建或升级的时候会触发
					console.log("onupgradeneeded", event.target.result);
					db = event.target.result; // 数据库对象
					// let objectStore;
					if (!db.objectStoreNames.contains(storeName)) {
						objectStore = db.createObjectStore(storeName, {
							keyPath: "id",
						}); // 创建表
					}
				};
			})
		}

		// 添加数据
		function addData(db, storeName, data) {
			let request = db
				.transaction([storeName], "readwrite") // 事务对象 指定表格名称和操作模式("只读"或"读写")
				.objectStore(storeName) // 仓库对象
				.add(data);
			request.onsuccess = function (event) {
				console.log("数据写入成功");
			};

			request.onerror = function (event) {
				console.log("数据写入失败", event);
				throw new Error(event.target.error);
			};
		}

		// 根据id获取数据
		function getPdcaData(db, storeName, key) {
			return new Promise((resolve, reject) => {
				let transaction = db.transaction([storeName]); // 事务
				let objectStore = transaction.objectStore(storeName); // 仓库对象
				let request = objectStore.get(key);
				request.onsuccess = function (event) {
					console.log("主键查询结果: ", request.result);
					queryData = request.result;
					resolve(request.result);
				};
				request.onerror = function (event) {
					console.log("事务失败");
				};
			})
		}

		// 根据id修改数据
		function updateDB(db, storeName, data) {
			let request = db
				.transaction([storeName], "readwrite") // 事务对象
				.objectStore(storeName) // 仓库对象
				.put(data);
			request.onsuccess = function () {
				console.log("数据更新成功",data);
			};

			request.onerror = function () {
				console.log("数据更新失败");
			};
		}

		// 根据id删除数据
		function deleteDB(db, storeName, id) {
			let request = db
				.transaction([storeName], "readwrite")
				.objectStore(storeName)
				.delete(id);

			request.onsuccess = function () {
				console.log("数据删除成功");
			};

			request.onerror = function () {
				console.log("数据删除失败");
			};
		}

//  删除数据库
		function deleteStoreDB(dbName) {
			try {
				// 删除数据库使用 indexedDB对象的deleteDatabase方法
				let request = indexedDB.deleteDatabase(dbName);
				request.onerror = function () {
					console.log('删除[' + dbName + ']数据库失败!!!!');
				}
				request.onsuccess = function () {
					console.log('删除[' + dbName + ']数据库成功!!!!');
				}
				console.log('request', request);

			} catch (e) {
				console.log('删除[' + dbName + ']数据库出现错误,' + e.getMessage);
			}
		}

            
            //  判断indexedDB数据库里面 是否存在当前存储的表  剩下的逻辑 回显 需要自己处理哦
                const cursor = event.target.result;
                console.log('cursor', cursor);
                if (cursor && (cursor.key == onePdcaContnet.id))