Published
Edited
Apr 2, 2019
Importers
4 stars
Insert cell
Insert cell
openDatabase = (resolve, reject, databaseName, objectStore, keyPath, version) => {
function openDB(resolve, reject, version) {
// In der folgenden Zeile sollten Sie die Präfixe einfügen, die Sie testen wollen.
const indexedDataBase = self.indexedDB || self.mozIndexedDB || self.webkitIndexedDB || self.msIndexedDB;
// Verwenden Sie "var indexedDB = ..." NICHT außerhalb einer Funktion.
// Ferner benötigen Sie evtl. Referenzen zu einigen window.IDB* Objekten:
const IndexedDBTransaction = self.IDBTransaction || self.webkitIDBTransaction || self.msIDBTransaction;
const IndexedDBKeyRange = self.IDBKeyRange || self.webkitIDBKeyRange || self.msIDBKeyRange;
// (Mozilla hat diese Objekte nie mit Präfixen versehen, also brauchen wir kein window.mozIDB*)
if (!indexedDataBase) {
reject("You Browser does not support IndexedDB.");
}

// send request to open data base, if version is given use it, otherwise ignore it
const idb_openrequest = !!version? indexedDataBase.open(databaseName, version): indexedDataBase.open(databaseName);
idb_openrequest.onerror = (event) => {
console.error("open request error event:", idb_openrequest.error);
reject(idb_openrequest.error);
};
// when this is called one can start transactions on object stores
idb_openrequest.onsuccess = (event) => {
const idb = event.target.result;
const storeIsThere = idb.objectStoreNames.contains(objectStore);
if(!storeIsThere){
// object store does not exist, database needs to be upgraded
console.log("A new object store needs to be created. database is to be upgraded.");
console.log("Current database version ", parseInt(idb.version));
idb.close();
openDB(resolve, reject, idb.version + 1);
} else {
resolve(idb);
}
}

// when a new database is created or version number is upgraded
// this is the only place we can alter database structure, in it we can create and delete object stores
idb_openrequest.onupgradeneeded = (event) => {
const idb = event.target.result;
console.log("onupgradeneeded:", event, "DB: ", idb);
// for this version we need an object store
createObjectStore(idb, objectStore, keyPath);
};
}
return openDB(resolve, reject, version);
}

Insert cell
createObjectStore = (idb, objectStore, keyPath) => {
const objectStoreItem = idb.createObjectStore(objectStore, { keyPath : keyPath });
objectStoreItem.createIndex(keyPath, keyPath, { unique : true });
}
Insert cell
db = {
return await new Promise((resolve, reject) => {
openDatabase(resolve, reject, dbName, objectStoreName, keyPath);
});
}
Insert cell
createData = (data) => {
return new Promise((resolve, reject) => {
var transaction = db.transaction([objectStoreName],'readwrite'),
objectStore = transaction.objectStore(objectStoreName);
var request = objectStore.put(data);
transaction.oncomplete = function(event) {
resolve(request.result);
};
transaction.onerror = function(error) {
reject(error);
};
});
}
Insert cell
readData = (url) => {
return new Promise((resolve, reject) => {
var transaction = db.transaction([objectStoreName],'readwrite'),
objectStore = transaction.objectStore(objectStoreName);
var request = objectStore.get(url);

transaction.oncomplete = function(event) {
resolve(request.result);
};
transaction.onerror = function(error) {
reject(error);
};
});
}
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more