惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
Vulnerabilities – Threatpost
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Privacy International News Feed
H
Heimdal Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
MyScale Blog
MyScale Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LINUX DO - 最新话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Cloudflare Blog
美团技术团队
Recorded Future
Recorded Future
T
Tailwind CSS Blog
Latest news
Latest news
Security Archives - TechRepublic
Security Archives - TechRepublic
Security Latest
Security Latest
Know Your Adversary
Know Your Adversary
Cloudbric
Cloudbric
Schneier on Security
Schneier on Security
I
Intezer
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
云风的 BLOG
云风的 BLOG
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Attack and Defense Labs
Attack and Defense Labs
人人都是产品经理
人人都是产品经理
L
LangChain Blog
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
L
Lohrmann on Cybersecurity
S
SegmentFault 最新的问题
W
WeLiveSecurity
C
Cybersecurity and Infrastructure Security Agency CISA
S
Securelist
SecWiki News
SecWiki News
V2EX - 技术
V2EX - 技术
IT之家
IT之家
Cyberwarzone
Cyberwarzone
F
Full Disclosure
Spread Privacy
Spread Privacy
阮一峰的网络日志
阮一峰的网络日志

博客园 - jowo

Vue.js中Promise、异步、同步、定时器 async/await 来处理异步详解 使用富文本编辑器wangEditor3 Promise的基本用法 zTree setting 配置 WebSQL vue-cli快速构建项目 接收的第一个参数是模块的局部状态对象。 如何使用JavaScript检测Ctrl+V,Ctrl+C? 什么情况下我应该使用 Vuex? Vue+node.js实现一个简洁的个人博客系统 Vuex 是什么? vue中mixins的理解及应用 Vue:slot用法 web.xml文件的的param-name Robots协议一定放在网站根目录下 浅谈重写与重载 笔记纪要:C# WebService URL重写 Java应用监控利器JMX
websql操作类封装
jowo · 2020-05-30 · via 博客园 - jowo

 在之前,我写了一个websql的封装类库,代码如下:

 View Code

  上述代码存在的问题非常明显,由于websql操作都是异步操作,当我们为了获取到websql操作的结果之后再进行后续操作时,往往是通过回调函数来实现的,当回调一多的时候,回调地狱就出现了,为了解决回调地狱问题,我将通过Promise来改写,后续调用时,可以直接通过await和async来调用,或者直接通过Promise链式调用也是可以的。

  现在我将通过ES6的语法重写之前的封装类,为了应用ES6中js面向对象的思想,我这里用到了class,最终代码如下:

复制代码

import { browserVersions } from '@/utils/utils.js';
class SmpWebSql {
  constructor(options) {
    options = options || {};
    this.database = null;
    this.DateBaseName = options.DateBaseName || 'RedDB';
    this.Version = options.Version || '1.0';
    this.Description = options.Description || '智维离线工单数据库';
    this.DataBaseSize = options.DataBaseSize || 2 * 1024 * 1024;
    this.init();
  }
  /**
   * 初始化数据库
   */
  init() {
    this.database = openDatabase(
      this.DateBaseName,
      this.Version,
      this.Description,
      this.DataBaseSize
    );
  }
  /**
   * 批量添加字段
   * @param {*} tableName 表名
   * @param {*} arr 更新的数据    [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
   * @param {*} index BLOG字段所在的索引位置
   * @param {*} isFirst 是否是第一次创建表
   */
  addBlob(tableName, arr, index, isFirst = true) {
    var _db = this.database;
    var _me = this;
    // eslint-disable-next-line promise/param-names
    return new Promise(function(resovle, reject) {
      if (arr == null) {
        return this;
      }
      var keyC = [];
      var keyI = [];
      var _key = '';
      arr = arr || [];
      if (arr && arr.constructor == Array) {
        for (var i in arr[0]) {
          keyC.push(i);
          keyI.push(i);
        }
        keyC[0] = keyC[0] + ' unique';
        _key = keyI.join(',');
        index = index == undefined ? 0 : index;
        keyC[index] = keyC[index] + ' BLOB';
        // eslint-disable-next-line promise/param-names

        _db.transaction(function(tx, result) {
          // var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
          // console.log('csql:' + csql);
          if (isFirst == true) {
            tx.executeSql(
              'CREATE TABLE IF NOT EXISTS ' +
                tableName +
                ' (' +
                keyC.join(',') +
                ')'
            );
          }
          // var sql = "";
          for (var s = 0, _len = arr.length; s < _len; s++) {
            var _value = _me.split(arr[s]);
            // sql += 'INSERT INTO ' + tableName + ' (' + _key + ') VALUES (' + _value + ')';
            // console.log("sql:" + sql);
            tx.executeSql(
              'INSERT INTO ' +
                tableName +
                ' (' +
                _key +
                ') VALUES (' +
                _value +
                ')',
              [],
              function(tx, result) {
                resovle(result.rowsAffected);
                console.log('添加成功' + result.rowsAffected);
              },
              function(tx) {
                console.error('添加失败');
                // eslint-disable-next-line prefer-promise-reject-errors
                reject(false);
              }
            );
          }
          _key = keyI = keyC = null;
          resovle(arr.length);
        });
      }
    }).catch(error => {
      console.log('error :', error);
    });
  }
  /**
   * 批量添加字段
   * @param {*} tableName 表名
   * @param {*} arr 更新的数据    [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
   * @param {*} index BLOG字段所在的索引位置
   * @param {*} firstKey firstKey 第一个字段是否是主键(默认是)
   * @param {*} isFirst 是否是第一次创建表
   */
  patchAddBlob(tableName, arr, index, firstKey = true, isFirst = true) {
    var _db = this.database;
    var _me = this;
    // eslint-disable-next-line promise/param-names
    return new Promise(function(resovle, reject) {
      if (arr == null) {
        return this;
      }
      var keyC = [];
      var keyI = [];
      var _key = '';
      arr = arr || [];
      if (arr && arr.constructor == Array) {
        for (var i in arr[0]) {
          keyC.push(i);
          keyI.push(i);
        }
        if (firstKey) {
          keyC[0] = keyC[0] + ' unique';
        }
        _key = keyI.join(',');
        index = index == undefined ? 0 : index;
        keyC[index] = keyC[index] + ' text';
        // eslint-disable-next-line promise/param-names

        _db.transaction(function(tx, result) {
          // var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
          // console.log('csql:' + csql);
          if (isFirst == true) {
            tx.executeSql(
              'CREATE TABLE IF NOT EXISTS ' +
                tableName +
                ' (' +
                keyC.join(',') +
                ')'
            );
          }
          var sql = '';
          var _values = [];
          for (var s = 0, _len = arr.length; s < _len; s++) {
            _values.push('(' + _me.split(arr[s]) + ')');
          }
          sql =
            'INSERT INTO ' +
            tableName +
            ' (' +
            _key +
            ') VALUES ' +
            _values.join(',');
          // console.log('sql:' + sql);
          tx.executeSql(
            sql,
            [],
            function(tx, result) {
              resovle(result.rowsAffected);
              // console.log('添加成功'+result.rowsAffected);
            },
            function(tx, error) {
              console.error('添加失败', tx, error);
              // eslint-disable-next-line prefer-promise-reject-errors
              reject(false);
            }
          );
          _key = keyI = keyC = null;
          resovle(arr.length);
        });
      }
    }).catch(error => {
      console.log('error :', error);
    });
  }
  /**
   * 批量添加字段 注 : 数据里面的第一个key 为主键
   * @param {*} tableName 表名
   * @param {*} arr arr 更新的数据    [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
   * @param {*} firstKey firstKey 第一个字段是否是主键(默认是)
   */
  add(tableName, arr, firstKey = true) {
    var _me = this;
    var _db = this.database;
    // eslint-disable-next-line promise/param-names
    return new Promise(function(resovle, reject) {
      if (arr == null) {
        return this;
      }
      var keyC = [];
      var keyI = [];
      var _key = '';
      arr = arr || [];
      if (arr && arr.constructor == Array) {
        for (var i in arr[0]) {
          keyC.push(i);
          keyI.push(i);
        }
        if (firstKey) {
          keyC[0] = keyC[0] + ' unique';
        }
        _key = keyI.join(',');
        _db.transaction(function(tx) {
          // /var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
          // console.log('csql:' + csql);
          tx.executeSql(
            'CREATE TABLE IF NOT EXISTS ' +
              tableName +
              ' (' +
              keyC.join(',') +
              ')'
          );
          // var sql = "";
          for (var s = 0, _len = arr.length; s < _len; s++) {
            var _value = _me.split(arr[s]);
            // sql += 'INSERT INTO ' + tableName + ' (' + _key + ') VALUES (' + _value + ')';
            // console.log("sql:" + sql);
            tx.executeSql(
              'INSERT INTO ' +
                tableName +
                ' (' +
                _key +
                ') VALUES (' +
                _value +
                ')',
              [],
              function(tx, result) {
                resovle(result.rowsAffected);
                // console.log('添加成功'+result.rowsAffected);
              },
              function(tx, error) {
                console.error('添加失败', error);
                // eslint-disable-next-line prefer-promise-reject-errors
                reject(false);
              }
            );
          }
          _key = keyI = keyC = null;
          resovle(arr.length);
        });
      }
    }).catch(error => {
      console.log('error :', error);
    });
  }
  /**
   * 批量添加行记录 注 : 数据里面的第一个key 为主键
   * @param {*} tableName 表名
   * @param {*} arr arr 更新的数据    [{key1:value1 , key2 : value2 ...},{key1:value1 , key2 : value2 ...}]
   * @param {*} firstKey firstKey 第一个字段是否是主键(默认是)
   */
  patchAdd(tableName, arr, firstKey = true) {
    var _me = this;
    var _db = this.database;
    // eslint-disable-next-line promise/param-names
    return new Promise(function(resovle, reject) {
      if (arr == null) {
        return this;
      }
      var keyC = [];
      var keyI = [];
      var _key = '';
      arr = arr || [];
      if (arr && arr.constructor == Array) {
        for (var i in arr[0]) {
          keyC.push(i);
          keyI.push(i);
        }
        if (firstKey) {
          keyC[0] = keyC[0] + ' unique';
        }
        _key = keyI.join(',');
        _db.transaction(function(tx) {
          // /var csql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + keyC.join(",") + ')';
          // console.log('csql:' + csql);
          tx.executeSql(
            'CREATE TABLE IF NOT EXISTS ' +
              tableName +
              ' (' +
              keyC.join(',') +
              ')'
          );
          var sql = '';
          var _values = [];
          for (var s = 0, _len = arr.length; s < _len; s++) {
            _values.push('(' + _me.split(arr[s]) + ')');
          }
          sql =
            'INSERT INTO ' +
            tableName +
            ' (' +
            _key +
            ') VALUES ' +
            _values.join(',');
          console.log('sql:' + sql);

          tx.executeSql(
            sql,
            [],
            function(tx, result) {
              resovle(result.rowsAffected);
              // console.log('添加成功'+result.rowsAffected);
            },
            function(tx, error) {
              console.error('添加失败');
              // eslint-disable-next-line prefer-promise-reject-errors
              reject(false);
            }
          );
          _key = keyI = keyC = null;
          resovle(arr.length);
        });
      }
    }).catch(error => {
      console.log('error :', error);
    });
  }