You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.3 KiB
82 lines
2.3 KiB
2 weeks ago
|
import { deepCopy } from './caller';
|
||
|
|
||
|
const db_name = 'transmigration_game';
|
||
|
export const store_name_archive = 'archive';
|
||
|
export const key_name_archive = 'version';
|
||
|
|
||
|
const version = 1;
|
||
|
let db;
|
||
|
/**
|
||
|
* 打开数据库
|
||
|
* @param {object} dbName 数据库的名字
|
||
|
* @param {string} version 数据库的版本
|
||
|
* @return {object} 该函数会返回一个数据库实例
|
||
|
*/
|
||
|
function openDB() {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
// 兼容浏览器
|
||
|
var indexedDB = window.indexedDB;
|
||
|
|
||
|
// 打开数据库,若没有则会创建
|
||
|
const request = indexedDB.open(db_name, version);
|
||
|
// 数据库打开成功回调
|
||
|
request.onsuccess = function (e) {
|
||
|
db = request.result; // 数据库对象
|
||
|
console.log('数据库打开成功');
|
||
|
resolve(db);
|
||
|
};
|
||
|
// 数据库打开失败的回调
|
||
|
request.onerror = function (e) {
|
||
|
console.log('数据库打开报错');
|
||
|
};
|
||
|
// 数据库有更新时候的回调
|
||
|
request.onupgradeneeded = function (e) {
|
||
|
// 数据库创建或升级的时候会触发
|
||
|
console.log('onupgradeneeded');
|
||
|
db = request.result; // 数据库对象
|
||
|
createArchiveStore();
|
||
|
};
|
||
|
});
|
||
|
}
|
||
|
|
||
|
const createArchiveStore = () => {
|
||
|
if (!db.objectStoreNames.contains(store_name_archive)) {
|
||
|
const objectStore = db.createObjectStore(store_name_archive, { keyPath: key_name_archive });
|
||
|
// 创建索引,在后面查询数据的时候可以根据索引查
|
||
|
// objectStore.createIndex(index_name_equip, index_name_equip, { unique: false });
|
||
|
}
|
||
|
};
|
||
|
|
||
|
await openDB();
|
||
|
|
||
|
export const insertToStore = (storeName, data) => {
|
||
|
data = deepCopy(data);
|
||
|
return new Promise<boolean>((resolve, reject) => {
|
||
|
const request = db
|
||
|
.transaction([storeName], 'readwrite') // 事务对象 指定表格名称和操作模式("只读"或"读写")
|
||
|
.objectStore(storeName) // 仓库对象
|
||
|
.put(data);
|
||
|
|
||
|
request.onsuccess = function (event) {
|
||
|
resolve(true);
|
||
|
};
|
||
|
|
||
|
request.onerror = function (event) {
|
||
|
resolve(false);
|
||
|
};
|
||
|
});
|
||
|
};
|
||
|
|
||
|
export const getFromStore = (storeName, id) => {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
const store = db.transaction([storeName], 'readonly').objectStore(storeName);
|
||
|
const request = store.get(id);
|
||
|
request.onsuccess = (e) => {
|
||
|
resolve(request.result);
|
||
|
};
|
||
|
request.onerror = (e) => {
|
||
|
resolve([]);
|
||
|
};
|
||
|
});
|
||
|
};
|