TypeScript 的IndexedDB 帮助类 笔记

最近在做BI项目,需要用到IndexedDB来做Key-Value类型的表 来本地缓存GIS渲染需要海量数据。(不得不吐槽YD公司网络部搭了那辣鸡内网环境)

做法和传统用Redis做缓存思路一样:Web本地DB有则区DB没有则请求WebAPI

(尼玛蛋,为什么 LocalStore只支持10M!~)

class DataPak {
    public CodeID: number = 1;
    public Data: any;
    public Message: string = ‘‘;
    public Description: string = ‘成功‘;

    constructor(Data: any = null, CodeID: number = 1, Description: string = ‘成功‘, Msg: string = ‘‘) {
        this.CodeID = CodeID;
        this.Data = Data;
        this.Message = Msg;
        this.Description = Description;
    };
};

class DB_Instance {
    private DB_Cache: string = ‘DB_Cache‘;
    private DB_VERSION: number = 1;
    private STORE_GISCache: string = ‘Store_GISCache‘;
    private db_ins: any;
    private DB: IDBFactory;
    private request: IDBOpenDBRequest;

    //初始化函数
    constructor() {
        let _this = this;
        this.DB = window.indexedDB;
        this.request = this.DB.open(this.DB_Cache, this.DB_VERSION);

        this.request.onsuccess = function (ev: Event) {
            console.log(‘Successful request for IndexedDB.‘);

            _this.db_ins = _this.request.result;
            var transaction = _this.db_ins.transaction(_this.STORE_GISCache, ‘readwrite‘);

            transaction.oncomplete = function () {
                console.log(‘Transaction completed successfully.‘);
            }

            transaction.onerror = function (error) {
                console.log(‘An error occurred during the transaction: ‘ + error);
            }
        };

        this.request.onupgradeneeded = function (this: IDBRequest, ev: Event) {

            _this.db_ins = this.result;
            //创建 GIS 表
            let Store_GISCache = _this.db_ins.createObjectStore(
                _this.STORE_GISCache,
                {
                    keyPath: ‘KeyID‘,
                    autoIncrement: ‘true‘ //自动自增加
                }
            );

            //索引 A
            Store_GISCache.createIndex(
                ‘by_keyid‘,
                ‘KeyID‘,
                {
                    ‘unique‘: true,
                }
            );

            //索引 B
            Store_GISCache.createIndex(
                ‘by_token‘,
                ‘Token‘,
                {
                    ‘unique‘: true,
                }
            );

            console.log(‘The database has been created/updated.‘);
        };

        this.request.onerror = function (ev: Event) {
            console.log(‘错误‘);
        }

        console.log(‘初始化成功‘);
    };

    //暴露  GISCache表实例。
    getStore_GISCache(): IDBObjectStore {
        let transaction = this.db_ins.transaction(this.STORE_GISCache, ‘readwrite‘);
        let store: IDBObjectStore = transaction.objectStore(this.STORE_GISCache);
        return store;
    }

    //Key-Value Query
    query_GISCache(token: string, func_onsuccess: any, func_onerror: any = null) {
        let transaction = this.db_ins.transaction(this.STORE_GISCache, ‘readwrite‘);
        let store = transaction.objectStore(this.STORE_GISCache);

        //let idIndex = store.index(‘by_keyid‘);
        let TokenIndex = store.index(‘by_token‘);

        let temp_request = TokenIndex.get(token);

        transaction.onsuccess = function () {
            let ret_pak = new DataPak(temp_request.result);
            func_onsuccess(ret_pak);
        };

        transaction.oncomplete = function () {
            let ret_pak = new DataPak(temp_request.result);
            func_onsuccess(ret_pak);
        };

        transaction.onerror = function (ev) {
            if (func_onerror != null) {
                let ret_pak = new DataPak(null, 0, ‘错误‘);
                func_onerror(ret_pak);
            }
        };
    };

    //Query List;
    queryList_GISCache(WhereFunc: any, func_onsuccess: any, func_onerror: any = null) {
        let transaction = this.db_ins.transaction(this.STORE_GISCache, ‘readwrite‘);
        let store = transaction.objectStore(this.STORE_GISCache);

        let ret_pak = new DataPak([], 1, ‘成功‘);

        store.openCursor().onsuccess = function (event) {
            var cursor = event.target.result;

            if (cursor) {
                let Current_Value = cursor.value;
                let bEnable = WhereFunc(Current_Value);
                if (bEnable) {
                    ret_pak.Data.push(Current_Value);
                }

                else {
                    ret_pak.Data.push(Current_Value);
                }
                cursor.continue();
            }
            else {
                func_onsuccess(ret_pak);
            }
        };

        store.openCursor().onerror = function (ev) {
            if (func_onerror != null) {
                ret_pak.CodeID = 0;
                ret_pak.Description = ‘错误‘;
                func_onerror(ret_pak);
            }
        };
    };

    //Insert
    insert_GISCache(val, func_onsuccess: any = null, func_onerror: any = null) {
        let transaction = this.db_ins.transaction(this.STORE_GISCache, ‘readwrite‘);

        transaction.onsuccess = function () {
            if (func_onsuccess != null) {
                let ret_pak = new DataPak();
                func_onsuccess(ret_pak);
            }
        };

        transaction.oncomplete = function () {
            //console.log(this);
            if (func_onsuccess != null) {
                let ret_pak = new DataPak();
                func_onsuccess(ret_pak);
            }
        };

        transaction.onerror = function (ev) {
            if (func_onerror != null) {
                let ret_pak = new DataPak(null, 0, ‘错误‘);
                func_onerror(ret_pak);
            }
        };

        let store = transaction.objectStore(this.STORE_GISCache);
        store.put(val);
    };

    //删除
    delete_GISCache(token: string, func_onsuccess: any = null, func_onerror: any = null) {

    };

    //删除
    deleteList_GISCache() {

    }

};

var db_Instance = new DB_Instance();
时间: 2024-11-11 06:50:49

TypeScript 的IndexedDB 帮助类 笔记的相关文章

算法程序设计题语言类笔记

1. 求幂 #include<math.h> //头文件 pow(a,b); //a^b 2. bool #include<stdbool.h> //C中使用bool型需要加入头文件 3. 字符串操作相关 #include<string.h> //头文件 char a[20],b[20]; strcpy(a,b); //把字符串b拷贝到a中 length=strlen(); //求长度 strcmp(a,b); //字符串比较,将a和b中的字符逐个比较,相同继续比较下一

ASP运行流程(主要的类笔记)

个人笔记:参考汤姆大叔的MVC之前那些事系列整理  client端发送页面请求,被IIS的某个进程截获,它根据申请的页面后缀(.aspx)不同,调用不同的页面处理程序(.asp->asp.dll; .aspx->ISAPI.dll).当asp应用程序进入CLR时, 框架会加载一个重要的类AppManagerAppDomainFactory. 在默认构造函数中,得到了ApplicationMananger对象. 而且这个类继承了IAppManagerAppDomainFactory,这个接口有个

TypeScript系列4-手册-类

类 传统的JavaScript语言基于函数和原型链继承机制的方式构建可重用的组件,但这对于OO编程人员来说显得比较笨拙,因为是在类的基础上来继承.从JavaScript标准ECMAScript 6开始可以采用面向对象基于类来构建应用.在TypeScript中开发人员现在就可以使用这些技术,TypeScript可以将它们编译为目前大多数浏览器和平台能允许的普通Javascript代码,可以不用等待下一版本的JavaScript的到来. 类 我们先看一个基于类的简单例子: class Greeter

IndexedDB基本使用——笔记

好记性不如烂笔头.indexedDB的API记录下来,备用.代码来源传智播客,在此感谢. indexedDB是HTML5-WebStorage的重要一环,是一种轻量级NOSQL数据库.相比web sql(sqlite)更加高效,包括索引.事务处理和健壮的查询功能. <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>&l

JDK常用类笔记

JDK常用类 目录 1. 系统相关类 2. 字符串相关类 3. 日期相关类 4. 数学运算相关类 1.1 System类 System类代表当前Java程序的运行平台,System类是一个静态类,所有的方法和属性都是静态的,该类用于记录程序执行的时间,复制数组,确定当前的系统属性和获取系统循环变量. 常用方法: (1) 终止当前正在运行的java虚拟机. System.exit(0);</br> 0表示正常退出,非0表示异常终止. (2) 运行垃圾回收器: System.gc();</b

class类笔记整理

1 # 例:类的概念 2 class 人类: 3 名字 = '未命名' # 成员变量 4 def 说话(内容): # 成员函数 5 print 内容 # 成员变量赋初始值 6 7 某人 = 人类() # 定义一个人类对象某人 8 某人.名字 = "路人甲" 9 某人.说话 ('大家好') # 路人甲说话 10 >>> 大家好! # 输出 Python中定义和使用类的形式为:class 类名[(父类名)]:[成员函数及成员变量],类名为这个类的名称,而父类名为可选,但定

java动态加载类和静态加载类笔记

JAVA中的静态加载类是编译时刻加载类  动态加载类指的是运行时刻加载类 二者有什么区别呢 举一个例子  现在我创建了一个类  实现的功能假设为通过传入的参数调用具体的类和方法 class office { public static void main(String args[]) { if("word".equals(args[0]) { word w=new word(); word.run(); } if("excel".equals(args[0]) {

MiniDump类笔记

h文件 : #pragma once #include <windows.h> #include <Tchar.h> #include <stdio.h> #include <stdlib.h> class CMiniDump { public: static BOOL Begin(VOID); //声明成静态函数是想直接调用而不必new一个实例 static BOOL End(VOID); }; cpp文件 : #include "CMiniDu

NSString类笔记

//字符串的创建         NSString *[email protected]"123";//创建一个字符串常量         NSString *str2 = [[NSString alloc] initWithString:@"123"];         NSString *str3 = [[NSString alloc] initWithString:str1];         NSString *str4 = [NSString string