未捕获的 DOMException:无法在“IDBObjectStore”上执行“删除”:事务未处于活动状态
Posted
技术标签:
【中文标题】未捕获的 DOMException:无法在“IDBObjectStore”上执行“删除”:事务未处于活动状态【英文标题】:Uncaught DOMException: Failed to execute 'delete' on 'IDBObjectStore': The transaction is not active 【发布时间】:2020-06-26 02:34:50 【问题描述】:当我尝试将我的 tensorflowjs 模型保存在 IndexedDb 中时出现此错误。基本上我正在开发一个可以实时预测情绪的离线网络应用程序。为了让我的应用程序更快,我必须使用 Indexed Db。前端在 Reactjs 中。 错误出现在这一行:
await this.model.save('indexeddb://' + INDEXEDDB_KEY);
这是代码。
try
this.model = await tf.loadLayersModel('indexeddb://' + INDEXEDDB_KEY);
// Safe to assume tensorflowjs database and related object store exists.
// Get the date when the model was saved.
try
const db = await openDB(INDEXEDDB_DB, 1, );
const item = await db.transaction(INDEXEDDB_STORE)
.objectStore(INDEXEDDB_STORE)
.get(INDEXEDDB_KEY);
const dateSaved = new Date(item.modelArtifactsInfo.dateSaved);
await this.getModelInfo();
console.log(this.modelLastUpdated);
if (!this.modelLastUpdated || dateSaved >= new Date(this.modelLastUpdated).getTime())
console.log('Using saved model');
else
this.setState(
modelUpdateAvailable: true,
showModelUpdateAlert: true,
);
catch (error)
console.warn(error);
console.warn('Could not retrieve when model was saved.');
// If error here, assume that the object store doesn't exist and the model currently isn't
// saved in IndexedDB.
catch (error)
console.log('Not found in IndexedDB. Loading and saving...');
console.log(error);
this.model = await tf.loadLayersModel(MODEL_PATH);
console.log(this.model,"model")
await this.model.save('indexeddb://' + INDEXEDDB_KEY);
// If no IndexedDB, then just download like normal.
else
console.warn('IndexedDB not supported.');
this.model = await tf.loadLayersModel(MODEL_PATH);
this.setState( modelLoaded: true );
// Warm up model.
// let prediction = tf.tidy(() => this.model.predict(tf.zeros([1, IMAGE_SIZE, IMAGE_SIZE, 3])));
// prediction.dispose();
'''
【问题讨论】:
【参考方案1】:如果没有待处理的请求,则事务关闭。看起来你的等待正在做一些非索引数据库的事情,所以很自然,因为你没有立即将事务中的一些请求排队,它会关闭,然后当你最终在事务上请求某些东西时,它就会被关闭时间(非活动)。
在您完成其他异步操作后开始您的事务。不要在开始事务和向其添加请求之间执行异步操作。
【讨论】:
以上是关于未捕获的 DOMException:无法在“IDBObjectStore”上执行“删除”:事务未处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的 DOMException:无法读取“cssRules”属性
未捕获的 DOMException:无法在“IDBObjectStore”上执行“删除”:事务未处于活动状态
未捕获的 DOMException:无法使用 JQuery 设置“innerHTML”属性
未捕获的 DOMException:无法在“CustomElementRegistry”上执行“定义”:此名称已用于此注册表
iframe chrome:未捕获的 DOMException:无法从“Window”读取“localStorage”属性:此文档的访问被拒绝