IndexDB

const databaseName = 'shop-cart'
const tableName = 'goods'

export default new class IndexDB {
    constructor() {
        this.connectDB()
    }
    connectDB() {
        const request = window.indexedDB.open(databaseName);
        request.onerror = () => {
            console.log('数据库打开报错');
        };
        request.onsuccess = () => {
            this.db = request.result;
            console.log('数据库打开成功');
        };
        request.onupgradeneeded = (event) => {
            console.log('数据库onupgradeneeded');
            this.db = event.target.result;
            if (!this.db.objectStoreNames.contains(tableName)) {
                const objectStore = this.db.createObjectStore(tableName, { keyPath: 'id' });
                objectStore.createIndex('name', 'name', { unique: false });
            }
        }
    }
    getTransaction() {
        return this.db.transaction([tableName], 'readwrite').objectStore(tableName)
    }
    add(record) {
        return new Promise((resolve, reject) => {
            try {
                const request = this.getTransaction().add(record);
                request.onsuccess = () => {
                    resolve()
                };
                request.onerror = (event) => {
                    reject(event)
                }
            } catch (error) {
                reject(error)
            }
        })
    }
    getRecordById(id) {
        return new Promise((resolve, reject) => {
            try {
                const objectStore = this.getTransaction()
                const request = objectStore.get(id);
                request.onerror = (event) => {
                    reject(event)
                };
                request.onsuccess = () => {
                    resolve(request.result ? request.result : {})
                };
            } catch (error) {
                reject(error)
            }
        })
    }

    getAll() {
        return new Promise((resolve, reject) => {
            try {
                const result = []
                const openCursor = this.getTransaction().openCursor()
                openCursor.onsuccess = (event) => {
                    const cursor = event.target.result;
                    if (cursor) {
                        result.push(cursor.value)
                        cursor.continue();
                    } else {
                        resolve(result)
                    }
                };
                openCursor.onerror = (event) => {
                    reject(event)
                }
            } catch (error) {
                reject(error)
            }
        })
    }

    update(record) {
        return new Promise((resolve, reject) => {
            try {
                const request = this.getTransaction().put(record);
                request.onsuccess = () => {
                    resolve()
                };
                request.onerror = (event) => {
                    reject(event)
                }
            } catch (error) {
                reject(error)
            }
        })
    }

    removeById(id) {
        return new Promise((resolve, reject) => {
            try {
                const request = this.getTransaction().delete(id);
                request.onsuccess = () => {
                    resolve()
                };
                request.onerror = (event) => {
                    reject(event)
                };
            } catch (error) {
                reject(error)
            }
        })
    }

    getByName(name) {
        return new Promise((resolve, reject) => {
            try {
                const result = []
                const index = this.getTransaction().index('name');
                const request = index.openCursor(name);
                request.onsuccess = function (e) {
                    const cursor = e.target.result;
                    if (cursor) {
                        result.push(cursor.value)
                        cursor.continue();
                    } else {
                        resolve(result)
                    }
                }
                request.onerror = (event) => {
                    reject(event)
                };
            } catch (error) {
                reject(error)
            }
        })
    }

}()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容