|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
export type INDEXEDDB_PARAMS = { db_name: string; // 数据库名称 store_name: string; // 仓库名 version?: number; // 版本 data?: any; // 存储数据 }; class IDB { protected db: IDBDatabase | null; constructor() { this.db = null; this.open = this.open.bind(this); this.put = this.put.bind(this); this.get = this.get.bind(this); this.getAll = this.getAll.bind(this); this.delete = this.delete.bind(this); } // 开 open({ db_name, store_name, version }: INDEXEDDB_PARAMS) { return new Promise((resolve, reject) => { const indexedDB = (window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB); const DB = indexedDB?.open(db_name, version); DB.onerror = (event) => { const target = event?.target as IDBRequest; console.log(`IndexedDB ${db_name} 打开失败:${target?.error?.name}`); reject(target?.error); }; DB.onsuccess = (event) => { console.log(`IndexedDB ${db_name} 打开成功`); const target = event?.target as IDBRequest; this.db = target?.result; resolve(this.db); }; DB.onupgradeneeded = (event) => { console.log(`IndexedDB ${db_name} onupgradeneeded`); const target = event?.target as IDBRequest; const _db = target?.result; if (!_db?.objectStoreNames?.contains(store_name)) { _db.createObjectStore(store_name, { autoIncrement: true, }); } }; }); } // 有则覆盖,无则新增 put({ store_name, data }: INDEXEDDB_PARAMS) { return new Promise((resolve, reject) => { const transaction = this?.db?.transaction([store_name], "readwrite"); const objectStore = transaction?.objectStore(store_name); const request = objectStore?.put(data); if (request) { request.onsuccess = () => { console.log("数据写入成功"); resolve("数据写入成功"); }; request.onerror = (event) => { const target = event?.target as IDBRequest; console.log("数据写入失败:", target?.error?.name); reject(target?.error); }; } else { reject("put error"); } }); } // 取 get({ store_name, key, }: INDEXEDDB_PARAMS & { key: IDBValidKey | IDBKeyRange }) { return new Promise((resolve, reject) => { const transaction = this?.db?.transaction([store_name], "readonly"); const objectStore = transaction?.objectStore(store_name); const request = objectStore?.get(key); if (request) { request.onsuccess = (event) => { const target = event?.target as IDBRequest; resolve(target?.result); }; request.onerror = (event) => { const target = event?.target as IDBRequest; console.log( `${store_name} 获取数据 ${key} 失败:`, target?.error?.name ); reject(target?.error); }; } else { reject("get error"); } }); } // 全取 getAll({ store_name }: INDEXEDDB_PARAMS) { return new Promise((resolve, reject) => { const transaction = this?.db?.transaction([store_name], "readonly"); const objectStore = transaction?.objectStore(store_name); const request = objectStore?.getAll(); if (request) { request.onsuccess = (event) => { const target = event?.target as IDBRequest; resolve(target?.result); }; request.onerror = (event) => { const target = event?.target as IDBRequest; console.log(`${store_name} 获取所有数据失败:`, target?.error?.name); reject(target?.error); }; } else { reject("get all error"); } }); } // 删 delete({ store_name, key, }: INDEXEDDB_PARAMS & { key: IDBValidKey | IDBKeyRange }) { return new Promise((resolve, reject) => { const transaction = this?.db?.transaction([store_name], "readwrite"); const objectStore = transaction?.objectStore(store_name); const request = objectStore?.delete(key); if (request) { request.onsuccess = () => { console.log("数据删除成功"); resolve("数据删除成功"); }; request.onerror = (event) => { const target = event?.target as IDBRequest; console.log("数据删除失败:", target?.error?.name); reject(target?.error); }; } else { reject("delete error"); } }); } } export default new IDB(); |

