Javascript 与lovefield连接承诺的例外情况

Javascript 与lovefield连接承诺的例外情况,javascript,angularjs,google-chrome,indexeddb,lovefield,Javascript,Angularjs,Google Chrome,Indexeddb,Lovefield,引发的异常: lovefield.js:2113 Uncaught NotFoundError:未能在“IDBDatabase”上执行“transaction”:未找到指定的对象存储之一。 各位,我已经和Lovefied斗争了很长一段时间,试图初始化我的db模式。我已经用try-catch模块包装了所有我怀疑可能存在问题的东西,但没有得到任何东西。我已经追踪到lovefield函数抛出异常。scanRowId\uuz但是,我仍然不知道是什么导致了这一点。如果它像丢失的表或丢失的字段一样直接,那么

引发的异常:
lovefield.js:2113 Uncaught NotFoundError:未能在“IDBDatabase”上执行“transaction”:未找到指定的对象存储之一。

各位,我已经和Lovefied斗争了很长一段时间,试图初始化我的db模式。我已经用try-catch模块包装了所有我怀疑可能存在问题的东西,但没有得到任何东西。我已经追踪到lovefield函数抛出异常。
scanRowId\uuz
但是,我仍然不知道是什么导致了这一点。如果它像丢失的表或丢失的字段一样直接,那么它应该在途中破坏一些东西。有没有想过原因是什么


Exibit 1:lovelace源代码 本节内容如下: 试一试{ var tx=opt|u tx|db.transaction([tableName]); req=tx.objectStore(tableName).openCursor(null,“prev”); }捕获(e){ 拒绝(e); 返回; } 是引发异常的位置。


Exibit 2:构建db模式的代码
Exibit 4:堆栈跟踪 未捕获NotFoundError:未能在“IDBDatabase”上执行“transaction”:未找到指定的对象存储之一。(匿名函数)@

堆栈跟踪:

lovefield.js:2113setTimeout(异步)goog.async.throweException@lovefield.js:2112(匿名函数)@lovefield.js:2589goog.async.run.processWorkQueue@lovefield.js:2250Promise.resolve(异步)goog.async.run.schedule@lovefield.js:2227goog.async.run@lovefield.js:2220goog.Promise.scheduleCallbacks@lovefield.js:2515goog.Promise.resolve@lovefield.js:2480(匿名函数)@lovefield.js:2302(匿名函数)@lovefield.js:6393goog.Promise@lovefield.js:2290scanTableRowId@lovefield.js:6387execquential@lovefield.js:6413goog.Promise@lovefield.js:2290lf.backstore.IndexedDB.scanRowId_@lovefield.js:6412(匿名函数)@lovefield.js:6316IndexedDB(异步)(匿名函数)@lovefield.js:6301goog.Promise@lovefield.js:2290lf.backstore.IndexedDB.init@lovefield.js:6298lf.base.init@lovefield.js:11246lf.proc.Database.init@lovefield.js:11548lf.schema.Builder.connect@lovefield.js:12202getDbConnection@lovefieldservice.js:181lovefieldService@lovefieldservice.js:194实例化@angulate.js:4619(匿名函数)@angular.js:4459invoke@angular.js:4604enforcedReturnValue@angular.js:4443invoke@angular.js:4604(匿名函数)@angular.js:4403getService@angular.js:4550InjectionArgular.js:4574实例化@angular.js:4616(匿名函数)@angular.js:9870(匿名函数)@angular ui router.js:4081invokeLinkFn@angular.js:9492nodeLinkFn@angular.js:8978compositeLinkFn@angular.js:8226publicLinkFn@angular.js:8106(匿名函数)@angular.js:8447updateView@angular ui router.js:4021(匿名函数)@angular ui router.js:3959Scope.$broadcast@angular.js:17143$state.transition.resolved.then.$state.transition@angular ui router.js:3352processQueue@angular.js:15552(匿名函数)@angular.js:15568Scope.$eval@angular.js:16820Scope.$digest@angular.js:16636Scope.$apply@angular.js:16928done@angular.js:11266completeRequest@angular.js:11464requestLoaded@angular.js:11405XMLHttpRequest.send(异步)(匿名函数)@angular.js:11442sendReq@angular.js:11235serverRequest@angular.js:10945processQueue@angular.js:15552(匿名函数)@angular.js:15568Scope.$eval@angular.js:16820Scope.$digest@angular.js:16636Scope.$apply@angular.js:16928bootstrapply@angular.js:1694invoke@angular.js:4604obootstrap@angular.js:1712angularInit@angular.js:1606(匿名函数)@angular.js:30423fire@jquery.js:3182self.fireWith@jquery.js:3312jQuery.extend.ready@jquery.js:3531completed@jquery.js:3547

好了,伙计们,我刚刚用
indexedDB.deleteDatabase('adDB');
这就解决了这个问题。对我提出质疑。除了一个原因之外,它还收集了我所有的表。(可能是因为数据库抛出了一个错误,并在我完成数组中所有表之前完成了以前的修订。如果有疑问,请清除它

对于如何清除indexedDb数据存储,这个答案也值得称赞。

好了,伙计们,我刚刚用
indexedDB.deleteDatabase('adDB');
这就解决了这个问题。对我提出质疑。除了一个原因之外,它还收集了我所有的表。(可能是因为数据库抛出了一个错误,并在我完成数组中所有表之前完成了以前的修订。如果有疑问,请清除它

对于如何清除indexedDb数据存储,这个答案也值得称赞。

lf.backstore.IndexedDB.prototype.scanRowId_ = function(opt_tx) {
  var tableNames = this.schema_.tables().map(function(table) {
    return table.getName();
  }), db = this.db_, maxRowId = 0, extractRowId = function(cursor) {
    if (this.bundledMode_) {
      var page = lf.backstore.Page.deserialize(cursor.value);
      return Object.keys(page.getPayload()).reduce(function(prev, cur) {
        return Math.max(prev, cur);
      }, 0);
    }
    return cursor.key;
  }.bind(this), scanTableRowId = function(tableName) {
    return new goog.Promise(function(resolve, reject) {
      var req;
      try {
        var tx = opt_tx || db.transaction([tableName]);
        req = tx.objectStore(tableName).openCursor(null, "prev");
      } catch (e) {
        reject(e);
        return;
      }
      req.onsuccess = function(ev) {
        var cursor = ev.target.result;
        cursor && (maxRowId = Math.max(maxRowId, extractRowId(cursor)));
        resolve(maxRowId);
      };
      req.onerror = function() {
        resolve(maxRowId);
      };
    });
  }, execSequentially = function() {
    if (0 == tableNames.length) {
      return goog.Promise.resolve();
    }
    var tableName = tableNames.shift();
    return scanTableRowId(tableName).then(execSequentially);
  };
  return new goog.Promise(function(resolve) {
    execSequentially().then(function() {
      resolve(maxRowId);
    });
  });
};
    var buildSchema = function() {

        schemaBuilder = lf.schema.create(urlConfig.dsName, urlConfig.versionNumber);
        console.assert(tableSchemas, 'tableSchemas!=null');
        console.assert(schemaBuilder, 'schemaBuilder!=null');

        angular.forEach(tableSchemas, function(val, key) {

            var item = tableSchemas[key];
            console.assert(item, 'item should not be null');

            var tableName = item['tsName'];
            console.assert(tableName, 'tableName should not be null');

            var fields = item['metaRecords'];
            console.assert(fields, 'fields should not be null');
            var table;

            var isPrimary = '';
            try {
                table = schemaBuilder.createTable(tableName);
            } catch (error) {
                console.log('failed to createTable(' + tableName + ')');
                console.log(error);
            }

            for (var x = 0; x < fields.length; x++) {
                var field = fields[x];
                try {
                    table.addColumn(field['fieldName'], eval(field['dataType']));
                } catch (error) {
                    console.log('failed at table.addColumn(' + field['fieldName'] + ',' + eval(field['dataType']) + ')');
                    console.log(error);
                }
                try {
                    if (field['isPrimary'] === '1') {
                        isPrimary = field['fieldName'];
                    } else {
                        table.addNullable([field['fieldName']]);
                    }
                } catch (error) {
                    console.log('failed at table.addNullable(' + field['fieldName']);
                    console.log(error);
                }
            }

            try {
                if (isPrimary !== '') {
                    if (isPrimary === 'autoid') {
                        table.addPrimaryKey([isPrimary], true);
                    } else {
                        table.addPrimaryKey([isPrimary]);
                    }
                }
            } catch (error) {
                console.log('failed at table.addPrimaryKey('+ [isPrimary]+')');
                console.log(error);
            }

        });
        //
        persistservice.setVal('dbInitialized', true);

    };
/**
 * Instantiates the DB connection (re-entrant).
 * @return {!IThenable<!lf.Database>}
 */
var getDbConnection = function() {
    if (db_ != null) {
        return db_;
    }

    if (!schemaBuilder) {
        buildSchema();
    }

    return schemaBuilder.connect()
        .then(function(db) {
            db_ = db;
            op = lovefield.op;
            fn = lovefield.fn;
            lf = lf;
            onConnected_();
            return db;
        });
};