-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathidbFuncs.js
More file actions
47 lines (40 loc) · 1.33 KB
/
idbFuncs.js
File metadata and controls
47 lines (40 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
export const idbFuncs = (() => {
let instance;
function openDB(dbName = "hcOS", version = 1, stores = []) {
return new Promise((resolve, reject) => {
const request = indexedDB.open(dbName, version);
request.onupgradeneeded = (e) => {
instance = e.target.result;
stores.forEach(storeInfo => {
if (!instance.objectStoreNames.contains(storeInfo.name)) {
instance.createObjectStore(storeInfo.name, { keyPath: storeInfo.keyPath });
}
});
};
request.onsuccess = () => {
instance = request.result;
resolve(instance);
};
request.onerror = () => reject(request.error);
});
}
function set(storeName, obj) {
return new Promise((resolve, reject) => {
const tx = instance.transaction(storeName, "readwrite");
const store = tx.objectStore(storeName);
store.put(obj);
tx.oncomplete = () => resolve();
tx.onerror = () => reject(tx.error);
});
}
function get(storeName, key) {
return new Promise((resolve, reject) => {
const tx = instance.transaction(storeName, "readonly");
const store = tx.objectStore(storeName);
const req = store.get(key);
req.onsuccess = () => resolve(req.result);
req.onerror = () => reject(req.error);
});
}
return { openDB, set, get };
})();