| // Quick and dirty promise wrapper of IDB. |
| |
| var pdb = { |
| _transformRequestToPromise: function(thisobj, func, argArray) { |
| return new Promise(function(resolve, reject) { |
| var request = func.apply(thisobj, argArray); |
| request.onsuccess = function() { |
| resolve(request.result); |
| }; |
| request.onerror = reject; |
| }) |
| }, |
| |
| transact: function(db, objectStores, style) { |
| return Promise.resolve(db.transaction(objectStores, style)); |
| }, |
| |
| openCursor: function(txn, indexOrObjectStore, keyrange, callback) { |
| return new Promise(function(resolve, reject) { |
| var request = indexOrObjectStore.openCursor(keyrange); |
| request.onerror = reject; |
| request.onsuccess = function() { |
| var cursor = request.result; |
| var cont = false; |
| var control = { |
| continue: function() {cont = true;} |
| }; |
| if (cursor) { |
| callback(control, cursor.value); |
| if (cont) { |
| cursor.continue(); |
| } else { |
| resolve(txn); |
| } |
| } else { |
| resolve(txn); |
| } |
| }; |
| }); |
| }, |
| |
| get: function(indexOrObjectStore, key) { |
| return this._transformRequestToPromise(indexOrObjectStore, indexOrObjectStore.get, [key]); |
| }, |
| |
| count: function(indexOrObjectStore, key) { |
| return this._transformRequestToPromise(indexOrObjectStore, indexOrObjectStore.count, [key]); |
| }, |
| |
| put: function(objectStore, key, value) { |
| return this._transformRequestToPromise(objectStore, objectStore.put, [key, value]); |
| }, |
| |
| add: function(objectStore, key, value) { |
| return this._transformRequestToPromise(objectStore, objectStore.add, [key, value]); |
| }, |
| |
| delete: function(objectStore, key) { |
| return this._transformRequestToPromise(objectStore, objectStore.delete, [key]); |
| }, |
| |
| clear: function(objectStore) { |
| return this._transformRequestToPromise(objectStore, objectStore.clear, []); |
| }, |
| |
| getKey: function(index, key) { |
| return this._transformRequestToPromise(index, index.getKey, [key]); |
| }, |
| |
| waitForTransaction: function(txn) { |
| return new Promise(function(resolve, reject) { |
| txn.oncomplete = resolve; |
| txn.onerror = reject; |
| txn.onabort = reject; |
| }); |
| } |
| } |