国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關于indexedDB的使用,以及一個簡單的封裝

Alliot / 1395人閱讀

摘要:因為寫起來簡潔,所以用寫法來作說明接口由提供,異步使用數據庫中的事件對象屬性。所有的讀取和寫入數據均在中完成。由發起,通過來設置的模式例如是否只讀或讀寫,以及通過來獲得一個。

//因為ES6寫起來簡潔,所以用ES6寫法來作說明
//IDBTransacation接口由IndexedDB API提供,異步transaction使用數據庫中的事件對象屬性。所有的讀取和寫入數據均在transactions中完成。由IDBDatabase發起transaction,通過IDBTransaction 來設置transaction的模式(例如是否只讀或讀寫),以及通過IDBObjectStore來獲得一個request。同時你也可以使用它來中止transactions。

let idxDB = {
    db: {},
    transaction: {},
    startTransaction() {
        //一個IDBTransacation只能使用一次
        //創建transaction有3個要求,一、有connection(數據庫連接),二、storeName(讀取的store名)、三、mode(包括readonly,readwrite和versionchange)
        this.transaction = this.db.transaction("diary", "readwrite");
        this.transaction.oncomplete = () => console.log("transaction complete");
        this.transaction.onerror = e => console.dir(e);
    },
    initDB() {
        //下面一行代碼,以數據庫名(danote)和版本號(1)為參數,異步打開一個數據庫
        let request = indexedDB.open("danote", 1);
        request.onerror = e => console.log(e.currentTarget.error.message);
        request.onsuccess = e => this.db = e.target.result;
        request.onupgradeneeded = e => {
            //如果之前數據庫不存在,也會運行onupgradeneeded
            //新建objectStore
            let thisDB = e.target.result;
            if (!thisDB.objectStoreNames.contains("diary")) {
                let objStore = thisDB.createObjectStore("diary", {
                    keyPath: "id",
                    autoIncrement: true
                });
                //第一個參數是index名稱,第二個參數是keyPath
                objStore.createIndex("by_create_date", "create_date", {
                    unique: false
                });
            }
        };
    },
    closeDB() {
        //主動close一個connection(其實沒什么意義,在被垃圾回收機制清除或創建上下文被destroy,connection會自動close)
        db.close();
    },
    deleteDB() {
        indexedDB.deleteDatabase("danote");
    },
    addData(data, cb) {
        this.startTransaction();
        //Object Store是indexedDB的主要儲存機制
        //IDBTransaction.objectStore()返回你查詢的objectStore(IDBObjectStore對象)
        let objectStore = this.transaction.objectStore("diary");
        let request = objectStore.add(data);
        request.onsuccess = () => {
            if (cb) cb({
                error: 0,
                data: data
            })
        };
        request.onerror = () => {
            if (cb) cb({
                error: 1
            })
        };
    },
    clearObjectStore(id, cb) {
        this.startTransaction();
        let objectStore = this.transaction.objectStore("diary");
        let request = objectStore.clear();
        request.onsuccess = () => {
            if (cb) cb({
                error: 0,
                data: id
            });
        };
        request.onerror = () => {
            if (cb) cb({
                error: 1
            });
        };
    },
    addmData(mdata, cb) {
        this.startTransaction();
        let objectStore = this.transaction.objectStore("diary");
        for (let c = 0; c < mdata.length; c++) {
            let request = objectStore.add(mdata[c]);
            request.onerror = () => {
                if (cb) cb({
                    error: 1
                })
            }
        }
    },
    deleteData(id, cb) {
        this.startTransaction();
        let objectStore = this.transaction.objectStore("diary");
        let request = objectStore.delete(id);
        request.onsuccess = () => {
            if (cb) cb({
                error: 0,
                data: id
            })
        };
        request.onerror = () => {
            if (cb) cb({
                error: 1
            })
        }
    },
    getDataById(id, cb) {
        this.startTransaction();
        let objectStore = this.transaction.objectStore("diary");
        let request = objectStore.get(id);
        request.onsuccess = () => {
            if (cb) cb({
                error: 0,
                data: e.target.result
            })
        };
        request.onerror = () => {
            if (cb) cb({
                error: 1
            })
        }
    },
    getDataAll(cb) {
        this.startTransaction();
        let objectStore = this.transaction.objectStore("diary");
        let rowData = [];
        objectStore.openCursor(IDBKeyRange.lowerBound(0)).onsuccess = (e) => {
            let cursor = e.target.result;
            if (!cursor && cb) {
                cb({
                    error: 0,
                    data: rowData
                });
                return;
            }
            rowData.unshift(cursor.value);
            cursor.continue();
        };
    },
    updateData(id, updateData, cb) {
        this.startTransaction();
        let objectStore = this.transaction.objectStore("diary");
        let request = objectStore.get(id);
        request.onsuccess = e => {
            let thisDB = e.target.result;
            for (key in updateData) {
                thisDB[key] = updateData[key];
            }
            objectStore.put(thisDB);
            if (cb) cb({
                error: 0,
                data: thisDB
            })
        };
        request.onerror = e => {
            if (cb) cb({
                error: 1
            })
        }
    },
    getDataBySearch(keywords, cb) {
        this.startTransaction();
        let objectStore = this.transaction.objectStore("diary");
        let boundKeyRange = IDBKeyRange.only(keywords);
        let rowData = [];
        objectStore.index("folder").openCursor(boundKeyRange).onsuccess = e => {
            let cursor = e.target.result;
            if (!cursor) {
                if (cb) cb({
                    error: 0,
                    data: rowData
                })
                return;
            }
            rowData.push(cursor.value);
            cursor.continue();
        };
    },
    getDataByPager(start, end, cb) {
        this.startTransaction();
        let objectStore = transaction.objectStore("diary");
        let boundKeyRange = IDBKeyRange.bound(start, end, false, true);
        //關于keyRange https://www.w3.org/TR/IndexedDB/#dfn-key-range
        let rowData = [];
        objectStore.openCursor(boundKeyRange).onsuccess = e => {
            let cursor = e.target.result;
            if (!cursor && cb) {
                cb({
                    error: 0,
                    data: rowData
                });
                return;
            }
            rowData.push(cursor.value);
            cursor.continue();
        };
    }
}
//objectStore的名稱在例子里全都寫死了,因為我只建了一個objectStore,使用時建議還是以參數傳進函數

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82494.html

相關文章

  • 關于indexedDB使用以及一個簡單封裝

    摘要:因為寫起來簡潔,所以用寫法來作說明接口由提供,異步使用數據庫中的事件對象屬性。所有的讀取和寫入數據均在中完成。由發起,通過來設置的模式例如是否只讀或讀寫,以及通過來獲得一個。 //因為ES6寫起來簡潔,所以用ES6寫法來作說明 //IDBTransacation接口由IndexedDB API提供,異步transaction使用數據庫中的事件對象屬性。所有的讀取和寫入數據均在trans...

    Rindia 評論0 收藏0
  • indexedDB事務功能Promise化封裝(二)——利用generator完成同步化改造

    摘要:在不可以用的前提下,無論是同步化或者鏈式操作都用不了。于是昨天我自己實現了一個簡單的同步執行的,并以此為基礎實現了鏈式操作。 前言 本來這個系列應該不會這么快更新,然而昨晚寫完前一篇后才發現我的思路中有一個巨大的漏洞。導致我在前一篇中花費大量時間實現了一個復雜的Transaction類——其實完全有更簡單的方式來完成這一切。前篇:http://segmentfault.com/a/11...

    JackJiang 評論0 收藏0
  • 初探IndexedDB

    背景 隨著前端技術日新月異地快速發展,web應用功能和體驗也逐漸發展到可以和原生應用媲美的程度,前端緩存技術的應用對這起到了不可磨滅的貢獻,因此想一探前端的緩存技術,這篇文章主要會介紹在日常開發中比較少接觸的IndexedDB IndexedDB 什么是IndexedDB IndexedDB簡單理解就是前端數據庫,提供了一種在用戶瀏覽器中持久存儲數據的方法,但是和前端關系型數據不同的是,Index...

    jsyzchen 評論0 收藏0
  • indexedDB事務功能Promise化封裝

    摘要:綜上,對進行一定的封裝,來簡化編碼操作。化的嘗試對于這種帶大量回調的,使用進行異步化封裝是個好主意。因此包括在內的所有異步方法都會強制中止當前事務。這就決定了一個事務內部的所有操作必須是同步完成的。目前只實現了和,其他的有待下一步工作。 前言 本文是介紹我在編寫indexedDB封裝庫中誕生的一個副產品——如何讓indexedDB在支持鏈式調用的同時,保持對事務的支持。項目地址:htt...

    zombieda 評論0 收藏0

發表評論

0條評論

Alliot

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<