Skip to content

Instantly share code, notes, and snippets.

@potch
Created November 6, 2013 19:16
Show Gist options
  • Save potch/7342356 to your computer and use it in GitHub Desktop.
Save potch/7342356 to your computer and use it in GitHub Desktop.
var asyncStorage = (function () {
var indexedDB = window.indexedDB ||
window.mozIndexedDB ||
window.webkitIndexedDB ||
window.msIndexedDB;
var storeName = 'asyncStorage';
var db;
function wrap(req) {
return new Promise(function (resolve, reject) {
req.onsuccess = function (e) {
resolve(req.result);
};
req.onerror = function (e) {
reject(req.errorCode);
};
});
}
function getItem (key) {
var transaction = db.transaction([storeName]);
var store = transaction.objectStore(storeName);
return new Promise(function (resolve, reject) {
wrap(store.get(key)).then(function(row) {
resolve(row ? row.value : undefined);
}, reject);
});
}
function setItem (key, value) {
var transaction = db.transaction([storeName], 'readwrite');
var store = transaction.objectStore(storeName);
return wrap(store.put({ 'key': key, 'value': value }));
}
function removeItem (key) {
var transaction = db.transaction([storeName], 'readwrite');
var store = transaction.objectStore(storeName);
return wrap(store.delete(key));
}
var exports = {
'getItem': getItem,
'setItem': setItem,
'removeItem': removeItem
};
function init () {
return new Promise(function (resolve, reject) {
if (!indexedDB) {
reject('No indexedDB implementation found!');
}
var req = indexedDB.open(storeName, 1);
req.onsuccess = function (e) {
db = req.result;
resolve(exports);
};
req.onupgradeneeded = function (e) {
db = req.result;
db.createObjectStore(storeName, { keyPath: 'key' });
resolve(exports);
};
req.onerror = reject;
});
}
return init();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment