indexed-db-as-promised 

A thin wrapper around IndexedDB, making it much more pleasant to use by
returning Promise-likes. Inspired by ideas in
indexeddb-promised,
but written with the SyncPromise
library to avoid issues with the transaction
lifetime.
This is not an official Google product.
Installation
npm install --save indexed-db-as-promised
Usage
The APIs mirror native IndexedDB's, just returning a promise-like everywhere
you would want one.
import indexedDBP from "indexed-db-as-promised";
indexedDBP.open('database', 1, {
upgrade(db, { transaction, oldVersion, newVersion }) {
const people = db.createObjectStore('people', { autoIncrement: true, keyPath: 'id' });
people.createIndex('ssn', 'ssn', { unique: true });
people.createIndex('lastName', 'last');
people.add({ first: 'Jane', last: 'Smith', ssn: '111-11-1111' });
}
}).then((db) => {
return db.transaction('people').run((tx) => {
const ssn = tx.objectStore('people').index('ssn');
return ssn.get('111-11-1111');
}).then((record) => {
console.log(record);
return db.transaction('people', 'readwrite').run((tx) => {
const store = tx.objectStore('people');
return store.put({ first: 'John', last: 'Smith', ssn: '111-11-1112' })
.then((key) => {
console.log(key);
return store.index('lastName').count(IDBKeyRange.only('Smith'));
});
});
}).then((count) => {
console.log(count);
return db.transaction('people').run((tx) => {
const open = tx.objectStore('people').openCursor();
return open.iterate((cursor) => {
const record = cursor.value;
cursor.continue();
return record.ssn;
}).then((ssns) => {
console.log(ssns);
});
});
}).then(() => {
db.close();
});
});
License
Apache 2.0