更新代码
parent
66e10c2886
commit
dcc9edf859
|
@ -0,0 +1,19 @@
|
|||
/**
|
||||
* indexdb API
|
||||
* @author yutent<yutent.io@gmail.com>
|
||||
* @date 2020/08/31 15:46:20
|
||||
*/
|
||||
|
||||
import Method from './method.js'
|
||||
|
||||
export default class Api {
|
||||
constructor(db) {
|
||||
this.db = db
|
||||
}
|
||||
|
||||
table(name) {
|
||||
var ta = this.db.transaction(name, 'readwrite')
|
||||
var table = ta.objectStore(name)
|
||||
return new Method(table)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
/**
|
||||
* indexdb辅助方法
|
||||
* @author yutent<yutent.io@gmail.com>
|
||||
* @date 2020/08/31 15:20:56
|
||||
*/
|
||||
|
||||
export function defer() {
|
||||
let obj = {}
|
||||
obj.promise = new Promise((resolve, reject) => {
|
||||
obj.resolve = resolve
|
||||
obj.reject = reject
|
||||
})
|
||||
return obj
|
||||
}
|
66
src/index.js
66
src/index.js
|
@ -0,0 +1,66 @@
|
|||
/**
|
||||
* {}
|
||||
* @author yutent<yutent.io@gmail.com>
|
||||
* @date 2023/04/11 15:10:04
|
||||
*/
|
||||
|
||||
import { defer, createTable } from './helper.js'
|
||||
import Api from './api.js'
|
||||
|
||||
export function createStore(name, version = 1) {
|
||||
let req = window.indexedDB.open(name, version)
|
||||
let _ = defer()
|
||||
|
||||
req.addEventListener('upgradeneeded', ev => {
|
||||
_.resolve(ev.target.result)
|
||||
})
|
||||
req.addEventListener('error', ev => {
|
||||
_.reject(ev.target.result.error)
|
||||
})
|
||||
return _.promise
|
||||
}
|
||||
|
||||
export function deleteStore(name) {
|
||||
let req = window.indexedDB.deleteDatabase(name)
|
||||
let _ = defer()
|
||||
|
||||
req.addEventListener('success', ev => {
|
||||
_.resolve()
|
||||
})
|
||||
req.addEventListener('error', ev => {
|
||||
_.reject(ev.target.result.error)
|
||||
})
|
||||
return _.promise
|
||||
}
|
||||
|
||||
export function createTable(db, { name, config }) {
|
||||
var opt = {}
|
||||
var table
|
||||
if (config.primaryKey) {
|
||||
opt.keyPath = config.primaryKey
|
||||
}
|
||||
if (config.autoIncrement) {
|
||||
opt.autoIncrement = config.autoIncrement
|
||||
}
|
||||
|
||||
table = db.createObjectStore(name, opt)
|
||||
|
||||
if (config.indexes && config.indexes.length) {
|
||||
for (let it of config.indexes) {
|
||||
table.createIndex(it + '_idx', it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function getStore(name) {
|
||||
let req = window.indexedDB.open(name)
|
||||
let _ = defer()
|
||||
|
||||
req.addEventListener('success', ev => {
|
||||
_.resolve(ev.target.result)
|
||||
})
|
||||
req.addEventListener('error', ev => {
|
||||
_.reject(ev.target.result.error)
|
||||
})
|
||||
return _.promise
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/**
|
||||
* {}
|
||||
* @author yutent<yutent.io@gmail.com>
|
||||
* @date 2023/04/11 15:11:31
|
||||
*/
|
||||
|
||||
export default class Method {
|
||||
constructor(table) {
|
||||
this.table = table
|
||||
}
|
||||
|
||||
put(obj) {
|
||||
this.table.put(obj)
|
||||
}
|
||||
|
||||
get(id) {
|
||||
var res = this.table.get(id)
|
||||
return new Promise(resolve => {
|
||||
res.onsuccess = function (ev) {
|
||||
resolve(this.result)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
getAll() {
|
||||
var res = this.table.getAll()
|
||||
return new Promise(resolve => {
|
||||
res.onsuccess = function (ev) {
|
||||
resolve(this.result)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
delete(id) {
|
||||
this.table.delete(id)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue