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;
});
};