一个全随机的刷装备小游戏
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

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([]);
};
});
};