在索引db中升级db版本时出错。 "请求被中止,例如通过调用IDBTransaction.abort。"
ConstraintError:事务中的变异操作失败,因为未满足约束。例如,对象存储或索引等对象已存在,并且正在尝试创建新对象。
任何人都可以帮助我吗?提前谢谢。
var DB_NAME = 'testdb';
var DB_VER = 2;
var db = null;
function upgradeDB(event) {
console.log('DB upgrade needed');
var db = event.target.result;
var txn = event.target.transaction;
txn.oncomplete = function(evt) {
console.log('Upgrade complete');
};
txn.onerror = function(evt) {
console.log('Upgrade failed', evt);
};
console.log('Creating tables');
..........................
...........................
}
var request = indexedDB.open(DB_NAME, DB_VER);
request.onsuccess = function(evt) {
db = request.result;
console.log('test DB opened');
callback();
};
request.onerror = function(evt) {
console.log('DB open failed', evt);
};
request.onupgradeneeded = upgradeDB;
答案 0 :(得分:1)
如果您查看IndexedDB规范(http://www.w3.org/TR/IndexedDB/),ContraintError的原因是:
所以你要点击其中一个案例。
前两个createObjectStore / createIndex案例会同步抛出异常;一个未被捕获的异常抛出了一个"升级所需的" handler将中止事务。你可以包装你的'创建表' try / catch块中的逻辑,看看是否发生了什么。 (你不能分享代码,所以我不能指出那里的任何逻辑缺陷。)
创建一个唯一的索引:由于现有数据而失败的索引将异步失败,而不是响应任何请求,因此唯一的标志就是事务中止。
其他情况会异步发生以响应现有数据并导致特定请求失败;你可以让onerror处理程序来检测它们。