gpt4 book ai didi

database - 在索引数据库中升级数据库版本时,在 firefox os 中出错。 "A request was aborted, for example through a call to IDBTransaction.abort."

转载 作者:搜寻专家 更新时间:2023-10-30 23:46:52 29 4
gpt4 key购买 nike

在索引数据库中升级数据库版本时出错。“请求被中止,例如通过调用 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;

最佳答案

如果您查看 IndexedDB 规范 ( http://www.w3.org/TR/IndexedDB/ ),ContraintError 的原因是:

  • 使用该数据库中已使用的名称创建对象存储
  • 使用已在该对象存储中使用的名称创建索引
  • 使用对象存储中现有数据违反的 unique:true 约束创建新索引
  • 达到 key 生成器限制
  • 在 key 已存在于商店中的情况下执行 add()
  • 在有索引的地方执行 add() 或 put(),生成的索引键违反了 unique:true 约束

所以您遇到了其中一种情况。

前两个createObjectStore/createIndex case会同步抛出异常;在“upgradeneeded”处理程序中抛出的未捕获异常将中止事务。您可以将“创建表”逻辑包装在 try/catch block 中,看看是否发生了这种情况。 (您不共享代码,所以我不能指出那里有任何逻辑缺陷。)

使用 unique:true 创建因现有数据而失败的索引将异步失败,而不是响应任何请求,因此唯一的标志是事务中止。

其他情况将异步发生以响应现有数据并使特定请求失败;你可以有 onerror 处理程序来检测那些。

关于database - 在索引数据库中升级数据库版本时,在 firefox os 中出错。 "A request was aborted, for example through a call to IDBTransaction.abort.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27604855/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com