indexedDB封装

class useIndexedDB {
  /**
   * @param databaseName
   * @param databaseTableName
   */
  constructor(databaseName, databaseTableName) {
    this.isIndexedDB = true;
    window.myIndexedDB =
      window.indexedDB ||
      window.mozIndexedDB ||
      window.webkitIndexedDB ||
      window.msIndexedDB;

    this.isIndexedDB = Boolean(window.myIndexedDB);
    if (this.isIndexedDB) {
      this.db = null;
      this.version = 1;
      this.databaseName = databaseName;
      this.databaseTableName = databaseTableName;
      this.dbRequest = window.myIndexedDB.open(this.databaseName, 1);

      this.dbRequest.onerror = (event) => {
        console.log("error", event);
      };
      this.dbRequest.onupgradeneeded = (event) => {
        this.db = event.target.result;
        this.store = this.db.createObjectStore(this.databaseTableName, {
          keyPath: "id",
        });
      };
    }
  }

  init() {
    return new Promise((resolve, reject) => {
      this.dbRequest = window.myIndexedDB.open(this.databaseName, this.version);
      this.dbRequest.onsuccess = (event) => {
        const db = event.target.result;
        if (db.objectStoreNames.contains(this.databaseTableName)) {
          const transaction = db.transaction(
            [this.databaseTableName],
            "readwrite"
          );
          const objectStore = transaction.objectStore(this.databaseTableName);
          resolve(objectStore);
        } else {
          this.db.createObjectStore(this.databaseTableName, { keyPath: "id" });
        }
      };
      this.dbRequest.onerror = (event) => {
        reject(event);
      };
    });
  }

  select(key) {
    return new Promise((resolve, reject) => {
      this.init().then((objectStore) => {
        const selectObjectStore = objectStore.get(key);
        selectObjectStore.onsuccess = function () {
          resolve(selectObjectStore.result);
        };
        selectObjectStore.onerror = function () {
          console.log("查询数据失败");
          reject(selectObjectStore.result);
        };
      });
    });
  }

  selectAll() {
    return new Promise((resolve, reject) => {
      this.init().then((objectStore) => {
        const results = [];
        const cursorObjectStore = objectStore.openCursor();
        cursorObjectStore.onsuccess = function (event) {
          const cursor = event.target.result;
          if (cursor) {
            results.push(cursor.value);
            cursor.continue();
          } else {
            resolve(results);
          }
        };
        cursorObjectStore.onerror = function () {
          console.log("查询游标失败");
          reject(cursorObjectStore.result);
        };
      });
    });
  }

  insert(options) {
    return new Promise((resolve, reject) => {
      this.init().then((objectStore) => {
        const insertObjectStore = objectStore.add(options);
        insertObjectStore.onsuccess = function (event) {
          resolve(insertObjectStore.result);
        };
        insertObjectStore.onerror = function () {
          console.log("插入数据失败");
          reject(insertObjectStore.result);
        };
      });
    });
  }

  delete(key) {
    return new Promise((resolve, reject) => {
      this.init().then((objectStore) => {
        const clearRequest = objectStore.delete(key);
        clearRequest.onsuccess = function () {
          resolve("删除数据成功");
        };
        clearRequest.onerror = function () {
          console.log("删除数据失败");
          reject(clearRequest.result);
        };
      });
    });
  }

  deleteAll() {
    return new Promise((resolve, reject) => {
      this.init().then((objectStore) => {
        const clearRequest = objectStore.clear();
        clearRequest.onsuccess = function () {
          resolve("删除数据成功");
        };
        clearRequest.onerror = function () {
          console.log("删除数据失败");
          reject(clearRequest.result);
        };
      });
    });
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值