IndexedDB Promise

Tetsing promises for indexeddb functions

by ed4becky

HTML

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular.js"></script>
<div ng-app="IDBTest">
     <h2>IDBTest</h2>

</div>

JavaScript

angular.module("IDBTest", []);

angular.module("IDBTest")
    .service("initSvc", ['$q', function ($q) {
    var svc = this;
    svc.dbVersion = 1;
    svc.open = open;
    svc.deleteDB = deleteDB;
    var idb = window.indexedDB;

    function deleteDB() {
        return $q(function (resolve, reject) {
            idb.webkitGetDatabaseNames().onsuccess = 
                function (sender, args) {
                if (sender.target.result 
                    && sender.target.result.length > 0) {
                    var db = sender.target.result[0];
                    console.log("deleting " + db);
                    var request = idb.deleteDatabase(db);
                    request.onsuccess = function () {
                        console.log('database ' + db + ' deleted.');
                        resolve();
                    };
                    request.onerror = function () {
                        reject();
                    };
                } else {
                    console.log("Nothing to delete");
                    resolve();
                };
            };
        });
    }

    function open(dbName) {
        return $q(function (resolve, reject) {
            var request = idb.open(dbName, svc.dbVersion);
            request.onupgradeneeded = function (e) {
                var db = e.target.result;
                console.log("creating new " + db.name);
                e.target.transaction.onerror = function (e) {
                    console.log(e);
                };
                db.createObjectStore("table1", {
                    keyPath: "id"
                });
                db.createObjectStore("table2", {
                    keyPath: "id"
                });
                db.createObjectStore("table3", {
                    keyPath: "id"
                });
            };

            request.onsuccess = function (e) {
                console.log('database ' + dbName + ' open.');
                svc.db = e.target.result;
   ...