<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      野獸111111111

      53221

      博客園 首頁 新隨筆 聯(lián)系 訂閱 管理

      indexedDb模塊

      快捷操作indexedDb

      使用:

      // 初始化

      let idb=indexDb.new(prop?)

      參數(shù):

        (可選)

        prop={

          // 數(shù)據(jù)庫名稱
          "databaseName": "defaultDB",

          // 表格名稱
          "tableName": "defaultTbl",

          // 主鍵名稱
          "keyPath": "cacheKey"
        }

      // 保存

      idb.set('id1',{name:'zhangsan',age:'16'})

      // 讀取

      idb.get('id1')

      // 搜索

      idb.search('name','san','')

      參數(shù):

        param1: object key      要搜索的對象字段名

        param2: object value like    要搜索的對象字段值包含內(nèi)容(模糊搜索)

        param3: primaryKey starts with  要搜索的主鍵篩選(左匹配), 不限制傳''空字符串

      --------------------------------

      下面正式代碼:

       

      /*indexedDB*/
      /*20210311 by 284949127*/
      /*@author http://mmbro.gitee.com*/
      /*@see http://www.rzrgm.cn/ljwsyt/p/9760266.html*/
      let indexDb = {
          defaultProp() {
              return {databaseName: 'defaultDB', tableName: 'defaultTbl', version: undefined, keyPath: 'cacheKey'};
          },
          new(prop = this.defaultProp()) {
              let indexDb = {
                  db: null,
                  objectStore: null,
                  request: null,
                  isInit: false,
                  prop: {databaseName: 'defaultDB', tableName: 'defaultTbl', version: undefined, keyPath: 'cacheKey'},
                  init: async (prop = indexDb.prop) => {
                      if (indexDb.isInit) {
                          console.log('do not init indexedDB again! indexedDB has already Initialized!');
                          return;
                      }
                      indexDb.prop = prop;
                      const DriverName = 'indexedDB';
                      if (!globalThis['indexedDB']) {
                          console.log('do not support indexedDB! indexedDB init failed!');
                          return;
                      }
                      let indexedDB = globalThis[DriverName];
                      let request = indexedDB.open(indexDb.prop.databaseName, indexDb.prop.version);
                      let isError = false;
                      request.onerror = (event) => {
                          console.log(DriverName + ' open error!', event);
                          isError = true;
                      };
                      request.onsuccess = (event) => {
                          console.log(DriverName + ' open success!', event);
                          indexDb.db = request.result;
                      };
                      let p = new Promise((resolve) => {
                          request.onupgradeneeded = function (event) {
                              let db = event.target['result'];
                              // check objectStore name is exist and create objectStore
                              if (!db.objectStoreNames.contains(indexDb.prop.tableName)) {
                                  console.log('create objectStore: ' + indexDb.prop.tableName);
                                  indexDb.objectStore = db.createObjectStore(indexDb.prop.tableName, {keyPath: indexDb.prop.keyPath});
                              }
                              indexDb.db = db;
                              resolve();
                          };
                          setTimeout(() => resolve(), 500);
                      });
                      await p;
                      indexDb.request = request;
                      return indexDb.isInit = !isError;
                  },
                  add: async (cacheKey, obj) => {
                      obj[indexDb.prop.keyPath] = cacheKey;
                      // add if not exist
                      let request = indexDb.db.transaction([indexDb.prop.tableName], 'readwrite')
                          .objectStore(indexDb.prop.tableName)
                          .add(obj);
                      let p = new Promise(((resolve) => {
                          request.onsuccess = function (event) {
                              console.log('add success!', event);
                              resolve(true);
                          };
                          request.onerror = function (event) {
                              console.log('add failed!', event);
                              resolve(false);
                          }
                      }));
                      return await p;
                  },
                  get: async (cacheKey) => {
                      let transaction = indexDb.db.transaction([indexDb.prop.tableName]);
                      let objectStore = transaction.objectStore(indexDb.prop.tableName);
                      let request = objectStore.get(cacheKey);
                      let p = new Promise((resolve) => {
                          request.onerror = function (event) {
                              console.log('transaction read failed!', cacheKey, event);
                              resolve(undefined);
                          };
                          request.onsuccess = function (event) {
                              if (!!request.result) {
                                  console.log('transaction read result!', cacheKey, request.result, event);
                                  resolve(request.result);
                              } else {
                                  console.log('transaction read empty!', cacheKey, event);
                                  resolve(undefined);
                              }
                          };
                      });
                      let getObj = await p;
                      console.log('getObj is', getObj);
                      return getObj;
                  },
                  set: async (cacheKey, obj) => {
                      obj[indexDb.prop.keyPath] = cacheKey;
                      // update
                      let request = indexDb.db.transaction([indexDb.prop.tableName], 'readwrite')
                          .objectStore(indexDb.prop.tableName)
                          .put(obj);
                      let p = new Promise((resolve) => {
                          request.onsuccess = function (event) {
                              console.log('transaction update success!cacheKey=', cacheKey, event);
                              resolve(true);
                          };
                          request.onerror = function (event) {
                              console.log('transaction update failed!', event);
                              resolve(false);
                          };
                      });
                      return await p;
                  },
                  remove: async (cacheKey) => {
                      let request = indexDb.db.transaction([indexDb.prop.tableName], 'readwrite')
                          .objectStore(indexDb.prop.tableName)
                          .delete(cacheKey);
                      let p = new Promise((resolve) => {
                          request.onsuccess = function (event) {
                              console.log('transaction delete success!', event);
                              resolve(true);
                          };
                          request.onerror = function (event) {
                              console.log('transaction delete failed!', event);
                              resolve(false);
                          };
                      });
                      return await p;
                  },
                  readAll: async () => {
                      let objectStore = indexDb.db.transaction(indexDb.prop.tableName).objectStore(indexDb.prop.tableName);
                      let p = new Promise((resolve) => {
                          let results = {};
                          objectStore.openCursor().onsuccess = function (event) {
                              let cursor = event.target['result'];
                              if (cursor) {
                                  results[cursor.key] = cursor.value;
                                  cursor.continue();
                              } else {
                                  console.log('cursor no more object! cursor:', cursor);
                                  resolve(results);
                              }
                          };
                      });
                      return await p;
                  },
                  // @link https://www.zhihu.com/question/24227578
                  search: async (key, value, keyFilter = 'main') => {
                      let all = await indexDb.readAll();
                      let searchResult = Object.keys(all).filter((oKey) => {
                          let obj = all[oKey];
                          let oKeyVal = obj[key];
                          if (!!oKeyVal && oKey.startsWith(keyFilter) && String(oKeyVal).includes(value)) {
                              return true;
                          }
                      }).map((oKey) => all[oKey]);
                      console.log('searchResult', searchResult);
                      return searchResult;
                  },
              };
              let p = indexDb.init(prop);
              p.then(() => console.log('indexedDB initialized'));
              return indexDb;
          }
      };
      posted on 2022-03-29 00:41  53221  閱讀(37)  評論(0)    收藏  舉報
      頁腳11111111111
      主站蜘蛛池模板: 天堂网亚洲综合在线| 青草99在线免费观看| 好男人官网资源在线观看| 四虎永久免费很黄的视频| 最新国产精品好看的精品| 乐陵市| 欧美精品国产综合久久| 熟妇人妻不卡中文字幕| 极品粉嫩小泬无遮挡20p| 一区二区三区四区五区自拍| 精品无人乱码一区二区三区的优势| 中国CHINA体内裑精亚洲日本| 不卡在线一区二区三区视频| 国产精品成| 久久国产精品精品国产色| 国产又黄又硬又粗| 一区二区中文字幕av| 日韩免费美熟女中文av| 午夜无码国产18禁| 亚洲日韩性欧美中文字幕| 国产亚洲精品97在线视频一| 亚洲 欧洲 自拍 偷拍 首页 | 日韩精品久久久肉伦网站| 亚洲精品久久无码av片软件| 亚洲综合一区国产精品| 国产精品欧美一区二区三区不卡| 少妇人妻精品无码专区视频| 亚洲成av人片在www鸭子| 中文字幕一区二区三区四区五区| 国产精品视频露脸| 不卡乱辈伦在线看中文字幕| 国产95在线 | 欧美| 九九热在线这里只有精品| 美女内射无套日韩免费播放| 无码日韩精品一区二区三区免费| 日韩亚洲精品国产第二页| 亚洲色欲在线播放一区二区三区| 国产精品香港三级国产av| 日本高清不卡一区二区三| 成人乱码一区二区三区av| 无码加勒比一区二区三区四区|