美文网首页
IndexedDB 初步使用

IndexedDB 初步使用

作者: 隐号骑士 | 来源:发表于2022-03-09 18:09 被阅读0次
    // 定义类
    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就相当于数据库中的一张表。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'}
    

    相关文章

      网友评论

          本文标题:IndexedDB 初步使用

          本文链接:https://www.haomeiwen.com/subject/apztdrtx.html