// 定義類
export default class CacheManager {
constructor(dbName = 'name', tableName = 'table') {
this.init(dbName, tableName);
}
init(dbName = 'iotServer', tableName = 'pageData') {
return new Promise((resolve, reject) => {
this.indexedDB =
window.indexedDB ||
window.webkitIndexedDB ||
window.mozIndexedDB ||
window.msIndexedDB;
this.IDBOpenDBRequest = this.indexedDB.open(dbName);
this.db = undefined;
this.tableName = tableName;
this.IDBOpenDBRequest.onsuccess = (e) => {
this.db = e.target.result;
resolve();
};
this.IDBOpenDBRequest.onupgradeneeded = (e) => {
this.db = e.target.result;
if (!this.db.objectStoreNames.contains(this.tableName)) {
// objectStore就相當于數(shù)據(jù)庫中的一張表。IDBObjectStore類型。
this.objectStore = this.db.createObjectStore(this.tableName, {
keyPath: 'id',
autoIncrement: false
});
}
resolve();
};
});
}
addValue(key, value) {
return new Promise((resolve, reject) => {
const request = this.db?.transaction([this.tableName], 'readwrite').objectStore(this.tableName).add({
id: key,
...value
});
request.onsuccess = (e) => {
resolve(e.target.result);
};
request.onerror = (e) => {
reject(e.target.error);
};
});
}
updateValue(key, value) {
return new Promise((resolve, reject) => {
const request = this.db?.transaction([this.tableName], 'readwrite').objectStore(this.tableName).put({
id: key,
...value
});
request.onsuccess = (e) => {
resolve();
};
request.onerror = (e) => {
reject(e);
};
});
}
getValue(key) {
return new Promise((resolve, reject) => {
const request = this.db?.transaction([this.tableName], 'readonly').objectStore(this.tableName).get(key);
request.onsuccess = (e) => {
resolve(request.result);
};
request.onerror = (e) => {
reject(e);
};
});
}
}
// 使用
let cacheManager = new CacheManager()
await cacheManager.init()
await cacheManager.addValue(1, {name: 'alen'})
await cacheManager.getValue(1) // {id:1, name: 'alen'}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。