IndexedDB 错误:NotFoundError:无法在“IDBDatabase”上执行“事务”:未找到指定的对象存储之一
Posted
技术标签:
【中文标题】IndexedDB 错误:NotFoundError:无法在“IDBDatabase”上执行“事务”:未找到指定的对象存储之一【英文标题】:IndexedDB Error : NotFoundError : Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found 【发布时间】:2021-01-16 22:32:54 【问题描述】:我在我的 ReactJs PWA 中创建了一个 IndexedDB 设置。
抛出以下错误:
NotFoundError: Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found.
在线userSearchDBtx = userSearchDB.transaction("userdata","readwrite")
我的函数如下所示:
function Users()
let userSearchDB,userSearchDBstore,userSearchDBtx;
let userDbrequest = window.indexedDB.open("MyTestDatabase", 1);
useEffect(()=>
if (!window.indexedDB)
console.log("Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.");
else console.log("IndexedDB supported")
userDbrequest.onupgradeneeded = function(event)
userSearchDB = event.target.result;
userSearchDBtx = event.target.transaction;
userSearchDBstore = userSearchDB.createObjectStore("userdata",keyPath:"uid")
;
userDbrequest.onerror = function(event)
console.log("ERROR: " + event.target.errorCode)
;
userDbrequest.onsuccess = function(event)
console.log("IndexdDb Working")
userSearchDB = event.target.result
userSearchDBtx = userSearchDB.transaction("userdata","readwrite");
userSearchDBstore = userSearchDBtx.objectStore("userdata");
;
//Here also put is unknown
userSearchDBstore.put(uid:3854238974,phone:3257777,name:"shan",email:"1@1.com")
,[])
【问题讨论】:
【参考方案1】:let userDbrequest = window.indexedDB.open("MyTestDatabase", 1);
将此行放在useEffect()中
代码应该是
let userSearchDB,userSearchDBstore,userSearchDBtx,userDbrequest;
useEffect(()=>
userDbrequest = window.indexedDB.open("MyTestDatabase", 2);
...Conrinue your code
,[])
另外,在这样做的同时增加版本
【讨论】:
【参考方案2】:您在连接数据库之前调用userSearchDBstore.put(...)
,这意味着没有保证升级需要回调完成,这意味着没有创建保证存储。
您需要等待。将 put 调用移至 open db 请求成功回调中,使其仅在数据库升级后运行。
【讨论】:
【参考方案3】:我发现原因是错误的 storeNames 位于:const request = db .transaction(storeNames , "readwrite")
【讨论】:
以上是关于IndexedDB 错误:NotFoundError:无法在“IDBDatabase”上执行“事务”:未找到指定的对象存储之一的主要内容,如果未能解决你的问题,请参考以下文章
填充许多 ObjectStore 时的 IndexedDB,错误:无法在“IDBDatabase”上执行“事务”:版本更改事务正在运行
为啥这个 IndexedDB put 命令失败?错误:DataError:DOM IDBDatabase 异常 0